linux-shell-sort-按指定列排序

 参考这里

文本如下:

110,1|1,10

110,1|2,101

110,3|1,103

110,4|1,16

110,5|1,12

112,1|1,10

112,1|2,101

112,2|1,103

110,6|1,11

104,2|1,34

112,3|1,103

112,4|1,16

112,6|1,11

113,1|1,30

110,2|1,103

112,5|1,12


sort -t”,” -k 1n,1 -k 3rn,3 file.txt


排序结果:

[root@lzpm 0621]# sort -t “,” -k 1n,1 -k 3rn,3 file.txt

104,2|1,34

110,2|1,103

110,3|1,103

110,1|2,101

110,4|1,16

110,5|1,12

110,6|1,11

110,1|1,10

112,2|1,103

112,3|1,103

112,1|2,101

112,4|1,16

112,5|1,12

112,6|1,11

112,1|1,10

113,1|1,30


结果说明:

1.-t 指定文本分隔符

2.-k 指定排序列

3.-n 按数字进行排序

4.-r 翻转排序结果

上面的例子为按第一行正排序,按第三行反排序;


尝试了一下:

示例文本是:

1Di1hRoTF2J5drmt68fM5T1op6ng61a7oQ|16174162

1LTRvixDF135BmXDbfDZg78FHGHcJzi3Za|1000039

1HhCZ8EXLG3VRk4BJUksmgaynL4zG68h87|1000509

13XG1UZPnyy4xR4dPjnwabpoMhupQWPdp2|1476276

1CRZk18DsS2SoKC65hbWq26Sj5JF5srSRN|13141000

1DkQEyqZz6aGAMGrQZ69iMW6XmNiLPLz41|13892251

1K14i1pqRWFm9i7t1cVRkpAkXXFXesK4J5|4553000

19q2sMN7Pc6FKoVSk21n3PXRctQewj4hVN|1900000

1LA5VGo9ZCqk7mrFpsy7QnsAdNNA694a1Y|1021503

1KMXyG9DSHBXSrkPqGCbpWNEDicuxmwcuc|1000000

123vQjgAAzHs71iEL1P6WicY1d6NPAf8nj|1703872

18u2ptqqk1nw7ze3VT4EcvBj7ZJyUA7ZWb|36665044

18vF5XJLm5EdWzHP5t4g9SMdhQ2AAqTgoU|25657103

1Q8r5mtVcppxgCTQBsamBCwFtCubi61xZi|1000000

1Fx3DgMrxy8Z7aPm8i9VXaxjYu2qAoG4R6|5000000000

1Er9Rhgi4exu9KKrwym6pyr5UMhrWE2JZd|36000000

1Hz8runwFR6PHVQ6LWrSfuRyqMqfygFT6y|1410000

14qpupZXmeBGsKz9kjNXLrssuhqLuQGQKu|4290369

14ukgx4C8tJDQfAm7gLoEuHgkf7YLKMRc5|1000049

1LVg8VxJ7yCWJomFC6shkYZBU5rQsvZ9kF|6000000

...


需求是:根据"|"后面的数字进行排序


执行的命令是: 

sort -t"|" -k 2rn,2 more.txt > sorted_more.txt


我其实并不是很清楚2rn后面的那个",2"是什么意思,但执行以后的结果是正确的。


后续:

先对addr和bal文件排序,然后在python中执行sum操作:

根据第一列(addr)排序: sort -t"|" -k 1,1 all_addr_bal.txt > sorted_all_addr_bal.txt