如果我有输入:
line1
line2
line3
line4
line5
line6
如何使用awk
打印
line2
line1
line4
line3
line6
line5
我觉得awk
可能是最好的工具,因为我想从流中做到这一点,但是bash还是其他任何更好的方式?
答案 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