我的文件格式如下:
12345 TAB_HERE名称:实际名称TAB_HERE 6785
例如
1001020 Name : SMITH S ANNALOLA 14570 5701061 Name : MATTHEW SANDY HILL 6440 7001083 Name : TANYA MORRISON MILLER 14406
我想按最后一个数字字段排序。
我更喜欢简单的一行python解决方案或基于linux工具的解决方案。
我尝试使用sort -k 3,3n,但它不起作用 我似乎无法编写单行python代码,我可以运行python -c“code here”
我看了以下但无济于事:
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/
答案 0 :(得分:3)
快速解决方案:
import sys
print "".join(sorted(sys.stdin.readlines(), key=lambda x:int(x.split()[-1])))
这种解决方案有一些缺点。例如,如果您在最后一个字段中没有数字的行,或者您希望对数据排序不是最后一个字段,而是排序其他所有字段,则它将不起作用。在这种情况下,您必须使用正则表达式(re
模块)并描述您要用于在key
函数中进行排序的字段。
答案 1 :(得分:2)
Python one liner:
cat file | python -c 'import sys; print "".join(sorted(sys.stdin.readlines(), key=lambda x:int(x.split()[-1])))'
我的猜测为什么另一个python示例不能作为一个衬里工作,他使用“标记代码并调用join()......
答案 2 :(得分:0)
我猜sort命令的--key参数计算空格字符。
sort -k7n
为我工作..