我有一个包含以下格式数据的文件: cat file1
a b c d e
e f g h i
p q r s t
我希望输出格式如下:
a c b d e
e g f h i
p r q s t
在vi或shell中交换两列的最佳方法是什么?
答案 0 :(得分:1)
以awk
为例:
$ awk '{a=$2; $2=$3; $3=a}1' file
a c b d e
e g f h i
p r q s t
您可以通过以下方式使其更加通用:
$ awk -v c1=FIRST_COL -v c2=SECOND_COL '{a=$c1; $c1=$c2; $c2=a}1' file
例如:
$ awk -v c1=2 -v c2=3 '{a=$c1; $c1=$c2; $c2=a}1' file
a b d c e
e f h g i
p q s r t
要在vi
内使用它,请在命令前使用以下命令:
:%!
这样执行的完整命令是:
:%!awk '{a=$2; $2=$3; $3=a}1'
答案 1 :(得分:1)
在vi中你可以执行以下命令:
:%!awk '{c3=$3; $3=$2; $2=c3} 1'