我有一个名为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