2009-08-04 106 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了。