用awk互换每隔一行

时间:2015-01-30 15:56:08

标签: bash awk

如果我有输入:

line1
line2
line3
line4
line5
line6

如何使用awk打印

line2
line1
line4
line3
line6
line5

我觉得awk可能是最好的工具,因为我想从流中做到这一点,但是bash还是其他任何更好的方式?

4 个答案:

答案 0 :(得分:4)

你也可以使用sed

sed -n 'h;n;p;g;p'

工作原理:使用h我们将当前行存储在“保留空间”中,使用n移至下一行,使用p打印,检索已保存的与g对齐,然后依次打印(p)。

答案 1 :(得分:3)

这样的东西
awk 'NR%2{prev=$0; next} {print ; print prev}'

<强>测试

$ awk 'NR%2{prev=$0; next} {print ; print prev}' input
line2
line1
line4
line3
line6
line5

答案 2 :(得分:2)

即使OP接受了答案,我也会添加这个sed one-liner:

sed -n '1~2{h;n};p;g;p' file

使用seq

进行小型测试
kent$ seq 6|sed -n '1~2{h;n};p;g;p'
2
1
4
3
6
5

答案 3 :(得分:1)

这是另一个awk。但请注意getline:如果使用不当,可能会咬人。

awk '{f=$0;getline;print $0 RS f}' file
line2
line1
line4
line3
line6
line5