对行列表排序的最简单方法是什么,按每行的最后一个字段排序?每行可能有不同数量的字段.

差不多

sort -k -1

这是我想要的,但是排序(1)不使用负数从末尾而不是开始 Select 字段.

我也希望能够 Select 字段分隔符.

编辑:为这个问题增加一些特殊性:我想要排序的列表是一个路径名列表.路径名可能具有任意深度,因此字段的数量可变.我想按文件名组件排序.

此附加信息可能会改变操作行以提取最后一个字段的方式(可以使用basename(1)),但不会改变排序要求.

例如

/a/b/c/10-foo
/a/b/c/20-bar
/a/b/c/50-baz
/a/d/30-bob
/a/e/f/g/h/01-do-this-first
/a/e/f/g/h/99-local

我希望这个列表按文件名排序,所有文件名都以数字开头,指示文件的读取顺序.

我在下面添加了我的答案,这是我目前的做法.我曾希望有一种更简单的方法——也许是另一种排序工具——也许不需要操纵数据.

推荐答案

下面是一个Perl命令行(请注意,您的shell可能需要您跳出$):

perl -e "print sort {(split '/', $a)[-1] <=> (split '/', $b)[-1]} <>"

只需将列表导入其中,或者,如果列表在文件中,则将文件名放在命令行的末尾.

请注意,此脚本实际上不会更改数据,因此您不必小心使用delimeter.

以下是示例输出:

>perl -e "print sort {(split '/', $a)[-1] <=> (split '/', $b)[-1]} " files.txt
/a/e/f/g/h/01-do-this-first
/a/b/c/10-foo
/a/b/c/20-bar
/a/d/30-bob
/a/b/c/50-baz
/a/e/f/g/h/99-local

Linux相关问答推荐

Microsoft ODBC Driver 18 for Python Docker Image,ARM设备;生成错误

在PowerShell for Linux上,打印出的maven命令还有其他字符

如何注释掉SLURM中的延迟调度命令?

在Linux中随机化txt文件但保证不重复行

如何查明第三方是否杀死或 destruct 了 C++ 中的程序

在具有不同文件类型的文件夹中编辑多个 xml 文件 - 使用预定顺序

如何验证所有 csv 文件是否具有相同的第一行?

如何使用适用于 Linux 的 Dockerized SQL Server 设置 MSDTC

有没有办法确定什么代码使 linux 共享对象inflating ?

如何从 AWK 中的 CSV 列中获取中值? (Linux)

操作系统信号处理循环 - 阻塞或非阻塞读取?

当 skylake 有 fsgsbase 时,为什么使用 __builtin_ia32_wrfsbase64 会收到非法指令?

如何用 Sed 替换 Match 后的 2 个连续行

获取变量中的当前路径并使用它

在没有root访问权限的情况下安装zsh?

使用特定目录作为根目录压缩目录的命令

在 VIM 中搜索和替换导致尾随字符

Linux 的 TextMate 替代品

如何将初始输入通过管道传输到随后将是交互式的进程中?

如何用逗号而不是空格分割列表