按特定字段对文件进行排序

时间:2012-06-18 16:22:00

标签: python linux unix sorting sysadmin

我的文件格式如下:
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/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/

3 个答案:

答案 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

为我工作..