Linux shell根据第二列排序文件?


Answers:


153

如果是UNIX:

sort -k 2 file.txt

您可以使用多个-k标志对多个列进行排序。例如,要按姓氏排序,然后按姓氏排序:

sort -k 2,2 -k 1,1 file.txt

“人排序”中的相关选项:

-k,--key = POS1 [,POS2]

在POS1处开始一个密钥,在POS2处结束(起源1)

POS是F [.C] [OPTS],其中F是字段编号,C是字段中的字符位置。OPTS是一个或多个单字母排序选项,它会覆盖该键的全局排序选项。如果没有给出密钥,则使用整行作为密钥。

-t,--field-separator = SEP

使用SEP而不是非空白到空白的过渡


2
--field-separator=','如果您可能需要数据输入运算符键入“名字”(例如“ Billy Bob”)之类的值,则要小心一点。逗号相对不太可能。
托尼·德罗伊

1
在这些字段中很可能出现逗号,例如“小史密斯”。或“ McDowell,高级”。或“约翰博士”或“纽约州纽约”
jbnunn 2014年

2
请注意,如果列在视觉上对齐,即每个字段之间的空格数不是恒定的,则必须使用该-b选项。这是因为sort实际上正在考虑要排序的字符串仅在逗号之后而不是从列的第一个字母开始。另外,您可能需要在命令前加上LC_ALL=C,以避免由于语言环境而产生的任何副作用,即使在简单的ASCII文件中,该副作用也可能发生。
calandoa

@calandoa感谢-b--ignore-leading-blanks)上的发言。为了澄清一点:首先echo -e 'aa<SPACE>a\na<SPACE><SPACE>b' | sort -k2给出a<SPACE><SPACE>b(第二列在first之后non-blank to blank transition,并且<SPACE><SPACE>b在之前<SPACE>a),但是随着-b给出的结果aa<SPACE>aa在before b)。
Kirill Bulygin's

7

仅按第二个字段排序(因此,在第二个字段匹配的情况下,具有匹配项的行将保持其原始顺序,而不会在其他字段上排序):

sort -k 2,2 -s orig_file > sorted_file

3

FWIW,这是一种排序方法,用于显示哪些进程使用的内存最高。

memstat | sort -k 1 -t':' -g -r | less

排序选项设置为第一列,使用:作为列分隔符,数字排序和反向排序。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.