按列排序分隔文件

时间:2013-09-10 16:14:34

标签: unix sorting sed awk

我的输入文件如下所示我需要根据分隔符'〜'排序此文件,即第1列按升序排序,第5列按降序排序。

010001~01001~JAN-00~009901~1~  
010001~01001~JAN-00~009901~2~  
010001~01001~JAN-00~009901~W~  
010001~01001~JAN-00~009901~X~  
010001~01001~JAN-00~009901~Z~  
010001~01001~JAN-00~009901~i~  
010001~01001~JAN-00~009901~j~  
010001~01001~JAN-00~009901~m~  
010001~01001~JAN-00~009901~n~  
010001~01001~JAN-00~009901~o~  
010001~01001~JAN-00~009901~p~  
010001~01001~JAN-00~009901~q~  
200407~20043~JUL-04~200307~P~  
200407~20043~JUL-04~200307~V~  
200407~20043~JUL-04~200307~k~  
200408~20043~AUG-04~200308~P~  
200408~20043~AUG-04~200308~V~  
200408~20043~AUG-04~200308~k~  
200409~20043~SEP-04~200309~P~  
200409~20043~SEP-04~200309~V~  
200409~20043~SEP-04~200309~k~  
200410~20044~OCT-04~200310~P~  
200410~20044~OCT-04~200310~V~  
200410~20044~OCT-04~200310~k~  
200411~20044~NOV-04~200311~P~  
200411~20044~NOV-04~200311~V~  
200411~20044~NOV-04~200311~k~  
200412~20044~DEC-04~200312~P~  
200412~20044~DEC-04~200312~V~  
200412~20044~DEC-04~200312~k~  

我尝试了以下命令,但无法得到理想的结果

sort -t$'~' -k1 -k5r filename

我的结果文件应该匹配如下

010001~01001~JAN-00~009901~q~  
010001~01001~JAN-00~009901~p~  
010001~01001~JAN-00~009901~o~  
010001~01001~JAN-00~009901~n~  
010001~01001~JAN-00~009901~m~  
010001~01001~JAN-00~009901~j~  
010001~01001~JAN-00~009901~i~  
010001~01001~JAN-00~009901~Z~  
010001~01001~JAN-00~009901~X~  
010001~01001~JAN-00~009901~W~  
010001~01001~JAN-00~009901~2~  
010001~01001~JAN-00~009901~1~  
200407~20043~JUL-04~200307~k~  
200407~20043~JUL-04~200307~V~  
200407~20043~JUL-04~200307~P~  
200408~20043~AUG-04~200308~k~  
200408~20043~AUG-04~200308~V~  
200408~20043~AUG-04~200308~P~  
200409~20043~SEP-04~200309~k~  
200409~20043~SEP-04~200309~V~  
200409~20043~SEP-04~200309~P~  
200410~20044~OCT-04~200310~k~  
200410~20044~OCT-04~200310~V~  
200410~20044~OCT-04~200310~P~  
200411~20044~NOV-04~200311~k~  
200411~20044~NOV-04~200311~V~  
200411~20044~NOV-04~200311~P~  
200412~20044~DEC-04~200312~k~  
200412~20044~DEC-04~200312~V~  
200412~20044~DEC-04~200312~P~  

有人可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:3)

告诉sort  在哪里停止匹配以及从哪里开始。

sort -t$'~' -k1,1 -k5,5r filename

没有,1(和,5),第一个比较从第1列开始到第一行。

POSIX说:

  

符号:

-k field_start[type][,field_end[type]]
     

应定义一个以field_start开头且以field_end结尾的关键字段,除非field_start超出行尾或field_end之后,在这种情况下关键字段为空。丢失的field_end表示该行的最后一个字符。