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

时间:2010-11-24 01:14:48

标签: linux shell

我有一个这样的文件:

FirstName, FamilyName, Address, PhoneNumber

如何按FamilyName对其进行排序?

5 个答案:

答案 0 :(得分:129)

如果是UNIX:

sort -k 2 file.txt

您可以使用多个-k标记对多个列进行排序。例如,要按姓氏排序,请将名字命名为平局:

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

“man sort”中的相关选项:

  

-k, - key = POS1 [,POS2]

     

在POS1开始一个键,在POS2(原点1)结束

     

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

     

-t, - field-separator = SEP

     

使用SEP代替非空白到空白转换

答案 1 :(得分:7)

仅按第二个字段排序(因此第二个字段匹配时,那些匹配的行保持原始顺序而不在其他字段上排序):

sort -k 2,2 -s orig_file > sorted_file

答案 2 :(得分:2)

sort -nk2 file.txt

因此,您可以更改列号。

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:0)

如果您喜欢编写JS,则可以使用smk(https://www.npmjs.com/package/smk

npm install -g smk
cat orig_file | smk -a -f"(arr) => arr.map((row) => row.split(',')).sort((a,b) => a[1]===b[1] ? 0: (a[1] < b[1] ? -1 : 1)).map((row) => row.join(',')).join('\r\n')"