它可能由awk中的多列排序?

时间:2017-02-18 01:21:33

标签: awk

按第三列和第四列排序

输入

B,c,3,
G,h,2,
J,k,4,
M,n,,1

输出

M,n,,1
G,h,2,
B,c,3,
J,k,4,

请帮帮我

已更新

      awk -F, 'a[$3]<$4{a[$3]=$4;b[$3]=$0}END{for(l in a){print b[l]","l} }' FILE2

我使用此命令,我获得

M,n,,1,

,2

,3

,4

3 个答案:

答案 0 :(得分:2)

sortawk

更好
$ sort -t, -k3,3n -k4,4n ip.txt 
M,n,,1
G,h,2,
B,c,3,
J,k,4,
  • -t,使用,作为分隔符
  • -k3,3n排序第3列,数字
  • -k4,4n然后按第4列排序,数字

答案 1 :(得分:0)

awk救援!

$ awk -F, '{a[$3,$4,NR]=$0} 
       END {n=asorti(a,ix);
            for(k=1;k<=n;k++) print a[ix[k]]}' file

M,n,,1
G,h,2,
B,c,3,
J,k,4,

请注意,密钥是以处理重复行

的方式构造的

如果您没有asorti这里有解决方法

$ awk -F, '{a[$0]=$3 FS $4 FS NR RS $0} 
       END {n=asort(a);
            for(k=1;k<=n;k++) 
              {sub(".*"RS,"",a[k]);
               print a[k]}}' file

我使用RS作为辅助分隔符,以使该行与排序键分开。注意重复的行将被计​​为一个(重复的键是好的)。如果要支持重复行,请更改为a[$0,NR]

答案 2 :(得分:0)

我使用此命令并且它可以工作:

nawk -F, '{a[$3]<$4;a[$3]=$4;b[$3]=$0} END{for(i in a){print b[i]}}'   FILE2