0

我有一个具有以下格式的文件:
12345 TAB_HERE 名称:实际名称 TAB_HERE 6785

例如。


1001020 名称 : SMITH S ANNALOLA 14570
5701061 名称 : 马修·桑迪·希尔 6440
7001083 名称 : 谭雅莫里森米勒 14406

我想按数字的最后一个字段排序。

我更喜欢简单的单行 python 解决方案或基于 linux 工具的解决方案。

我尝试使用 sort -k 3,3n 但它不起作用。
而且我似乎无法编写可以作为 python -c "code here" 运行的单行 python 代码

我查看了以下内容但无济于事:

http://www.unix.com/unix-dummies-questions-answers/18359-how-do-i-specify-tab-field-separator-sort.html

http://www.unix.com/unix-dummies-questions-answers/30450-sort-third-column-n-command.html

http://www.linuxquestions.org/questions/programming-9/unix-sort-on-multiple-fields-598813/

4

3 回答 3

3

快速解决方案:

import sys
print "".join(sorted(sys.stdin.readlines(), key=lambda x:int(x.split()[-1])))

该解决方案有一些缺点。例如,如果您在最后一个字段中有没有编号的行,或者您不想按最后一个字段而是按其他所有内容对数据进行排序,它将不起作用。在这种情况下,您必须使用正则表达式(re模块)并描述要用于在key函数中进行排序的字段。

于 2012-06-18T16:26:58.960 回答
2

Python一班轮:

cat file | python -c 'import sys; print "".join(sorted(sys.stdin.readlines(), key=lambda x:int(x.split()[-1])))'

我猜为什么另一个 python 示例不能作为一个衬里工作是他使用 " 来标记代码并调用 join()...

于 2012-06-19T10:37:13.020 回答
0

我猜 sort 命令的 --key 参数会计算空格字符。

sort -k7n

为我工作..

于 2012-06-18T16:32:22.103 回答