排序我有一個看起來像這樣在UNIX文件,迅速每一行的字段(列)
12;6
2;4
9;4
...
在這種情況下,字段(列)分隔符是一個文件「;」。我想排序每行中的字段。可接受的輸出是:
6;12
2;4
4;9
可接受的解決方案可以假定字段分隔符是「;」和值是整數。理想的解決方案更靈活,允許使用不同的分隔符和字母數字排序。
這一切都需要在命令行上完成。
排序我有一個看起來像這樣在UNIX文件,迅速每一行的字段(列)
12;6
2;4
9;4
...
在這種情況下,字段(列)分隔符是一個文件「;」。我想排序每行中的字段。可接受的輸出是:
6;12
2;4
4;9
可接受的解決方案可以假定字段分隔符是「;」和值是整數。理想的解決方案更靈活,允許使用不同的分隔符和字母數字排序。
這一切都需要在命令行上完成。
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
這個解決方案(比其他一些方法)的優點是它即使在線上也有三個或更多個字段也可以工作。 –
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
爲什麼不在命令行中使用'-F';'',避免使用詳細的BEGIN塊? –
到目前爲止,你有什麼嘗試? – Mat