2009-08-04 36 views
8

我有一個名爲ip-list兩列文件:優雅的方式來扭轉列順序

IP1 <TAB> Server1 
IP2 <TAB> Server2 

我想生產:

Server1 <TAB> IP1 
Server2 <TAB> IP2 

什麼是最優雅的,最短的Linux命令行工具做它?

+0

哪個平臺? Windows,Unix,Max。 。 。 – 2009-08-04 14:57:03

+0

添加了「Linux」。謝謝。 – 2009-08-04 14:57:59

回答

12

用AWK:

awk '{print $2,$1}' ip-list 

這應該給你想要的東西。

3

最簡單的解決方法是:

 
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 
+0

文件名在哪裏? – 2009-08-04 14:58:37

0

perl -pi -e 's/^([^\t]+)\t([^\t]+)$/\2\t\1/' yourfile.csv

perl -pi -e 'split("\t"); print "$_[1]\t$_[0]"'

第一個可能適用於sed了。