2012-10-07 26 views
0

排序我有一個看起來像這樣在UNIX文件,迅速每一行的字段(列)

12;6 
2;4 
9;4 
... 

在這種情況下,字段(列)分隔符是一個文件「;」。我想排序每行中的字段。可接受的輸出是:

6;12 
2;4 
4;9 

可接受的解決方案可以假定字段分隔符是「;」和值是整數。理想的解決方案更靈活,允許使用不同的分隔符和字母數字排序。

這一切都需要在命令行上完成。

+1

到目前爲止,你有什麼嘗試? – Mat

回答

3
perl -wne '$,=";"; chop; 
    print sort { $a <=> $b } split ";"; 
    print "\n"' input 

如果你的Perl是不是古代:

perl -wnE '$,=";"; chop; 
     say sort { $a <=> $b } split ";"' input 

你也可以這樣做:

perl -F\; -wanE 'chop $F[-1]; $,=";"; say sort { $a <=> $b } @F' input 
+0

這個解決方案(比其他一些方法)的優點是它即使在線上也有三個或更多個字段也可以工作。 –

2
awk 'BEGIN{FS=OFS=";"}{if($1>$2)print $2,$1;else print $1,$2;}' file 

測試

kent$ cat t.txt 
12;6 
2;4 
9;4 
ccc;aaa 
bab;baa 

kent$ awk 'BEGIN{FS=OFS=";"}{if($1>$2)print $2,$1;else print $1,$2;}' t.txt 
6;12 
2;4 
4;9 
aaa;ccc 
baa;bab 
+0

爲什麼不在命令行中使用'-F';'',避免使用詳細的BEGIN塊? –