我有一個名爲ip-list
兩列文件:優雅的方式來扭轉列順序
IP1 <TAB> Server1
IP2 <TAB> Server2
我想生產:
Server1 <TAB> IP1
Server2 <TAB> IP2
什麼是最優雅的,最短的Linux命令行工具做它?
我有一個名爲ip-list
兩列文件:優雅的方式來扭轉列順序
IP1 <TAB> Server1
IP2 <TAB> Server2
我想生產:
Server1 <TAB> IP1
Server2 <TAB> IP2
什麼是最優雅的,最短的Linux命令行工具做它?
用AWK:
awk '{print $2,$1}' ip-list
這應該給你想要的東西。
最簡單的解決方法是:
awk '{print $2 "\t" $1}'
不過,也有一些問題。如果可以在任一領域的是白色的空間,你需要做的一個:(取決於如果你的AWK支持-v)
awk -v FS='\t' '{print $2 "\t" $1}' awk 'BEGIN{ FS="\t" } {print $2 "\t" $1}'
或者,你可以做一個:
awk -v OFS='\t' '{print $2,$1}' awk 'BEGIN{ OFS="\t" } {print $2,$1}' awk -v FS='\t' -v OFS='\t' '{print $2,$1}' # if allowing spaces in fields
其中一條評論問,'文件名在哪裏'? awk用作過濾器,因此它通常顯示爲:
$ some-cmd | awk ... | other-cmd
沒有給出文件名。或者,文件名可以作爲所有命令後的參數:
$ awk ... filename
文件名在哪裏? – 2009-08-04 14:58:37
perl -pi -e 's/^([^\t]+)\t([^\t]+)$/\2\t\1/' yourfile.csv
perl -pi -e 'split("\t"); print "$_[1]\t$_[0]"'
第一個可能適用於sed
了。
兩個以上的列
printf '1 2 3 4\n5 6 7 8\n' | awk '{for(i=NF;i>0;i--)printf "%s ",$i;print ""}'
輸出:
4 3 2 1
8 7 6 5
參見:https://unix.stackexchange.com/questions/46275/swapping-an-unlimited-number-of-columns
在GNU awk中4.0.1進行測試。
哪個平臺? Windows,Unix,Max。 。 。 – 2009-08-04 14:57:03
添加了「Linux」。謝謝。 – 2009-08-04 14:57:59