对行列表进行排序(对每行的最后一个字段进行排序)的最简单方法是什么?每行可以有可变数量的字段。
就像是
sort -k -1
是我想要的,但 sort(1) 不采用负数来从末尾而不是从开头选择字段。
我还希望能够选择字段分隔符。
编辑:要为问题添加一些特殊性:我要排序的列表是路径名列表。路径名可以是任意深度,因此字段的数量是可变的。我想对文件名部分进行排序。
此附加信息可能会改变操作行以提取最后一个字段的方式(可以使用 basename(1)),但不会改变排序要求。
e.g.
/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
我希望此列表按文件名排序,所有文件名均以数字开头,指示文件应读取的顺序。
我在下面添加了我的答案,这就是我目前正在做的事情。我曾希望有一种更简单的方法 - 也许是不同的排序实用程序 - 也许不需要操作数据。
awk '{print $NF,$0}' file | sort | cut -f2- -d' '
基本上,这个命令的作用是:
- 重复开头的最后一个字段,用空格分隔(默认 OFS)
- 排序,解决重复的文件名使用完整路径($0)进行排序
- 剪切重复的第一场,f2-表示从第二场到最后一场
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)