如何将文本内容奇数行与偶数行调换?

如题目,是本人很早面试时被面试官问到的,不是笔试题,当时我就懵了,正则不是很牛逼。我回复说我想一下,之后回复说用sed,对方又问如果文本内容有1万行,你怎么替换?然后我就呵呵了,结果你懂的。回来后请教了论坛的高手解答出来了。大家可以参考学习一下,工作中可能会遇到同样的问题


举例说明:

[root@yonglinux ~]# grep -En '[0-9]|[a-z]' 1.txt
1:239fb
2:5e0eb
3:a8b5f
4:bb42c
5:9e242
6:2336b
7:5ecf1
8:4f2d5
9:8fd6b
10:ce886

第一种方法:sed

[root@yonglinux ~]# sed -r 'N;s/(.*)\n(.*)/\2\n\1/' 1.txt
5e0eb
239fb
bb42c
a8b5f
2336b
9e242
4f2d5
5ecf1
ce886
8fd6b

解释说明:

sed以行为单位处理文本,其模式缓冲区内只保留一行内容待处理。

N 命令,将下一行读入并附加到当前行后面,以 \n (换行符)分隔,一起存在模式缓冲区内。



第二种方法:awk

[root@yonglinux ~]# awk 'NR%2{a=$0;next}{print $0"\n"a}' 1.txt
5e0eb
239fb
bb42c
a8b5f
2336b
9e242
4f2d5
5ecf1
ce886
8fd6b

写回文件的话sed方便,效率的话awk稍微快一点,万行约10毫秒。



你可能感兴趣的:(如何将文本内容奇数行与偶数行调换?)