【发布时间】:2010-07-11 11:05:39
【问题描述】:
对行列表进行排序的最简单方法是什么,对每行的最后一个字段进行排序?每行可能有可变数量的字段。
类似
sort -k -1
是我想要的,但是 sort(1) 不采用负数从末尾而不是开头选择字段。
我也希望能够选择字段分隔符。
编辑:为问题添加一些特殊性:我要排序的列表是路径名列表。路径名可能具有任意深度,因此字段数可变。我想对文件名组件进行排序。
这些附加信息可能会改变操作该行以提取最后一个字段的方式(可以使用 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
我希望这个列表按文件名排序,所有文件名都以数字开头,表示文件的读取顺序。
我在下面添加了我的答案,这就是我目前的做法。我曾希望有一种更简单的方法——也许是不同的排序实用程序——也许不需要操作数据。
【问题讨论】:
-
+100 表示
sort -k -1。在日常工作中,我应该如何记住那些“你只需要这条带有 7 根管道的小管线”的解决方案...... -
你试过
rev吗?例如。find . -type f | rev | sort | rev -
@A.Danischewski:这将首先对行的最后一个字符进行排序,而不是最后一个字段的第一个字符。尝试使用我在问题中的示例数据对其进行测试,看看效果如何。
-
这取决于你想做什么,如果你需要排序以删除目录中的重复项,使用 rev 可能就足够了。如果您出于其他原因需要对其进行排序,您可能会使用类似:
cat t.txt | sed 's#.*/##' |sort| xargs -n1 -i grep {} t.txt