天天看点

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

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

举例说明:

1

2

3

4

5

6

7

8

9

10

11

<code>[root@yonglinux ~]</code><code># grep -En '[0-9]|[a-z]' 1.txt</code>

<code>1:239fb</code>

<code>2:5e0eb</code>

<code>3:a8b5f</code>

<code>4:bb42c</code>

<code>5:9e242</code>

<code>6:2336b</code>

<code>7:5ecf1</code>

<code>8:4f2d5</code>

<code>9:8fd6b</code>

<code>10:ce886</code>

第一种方法:sed

<code>[root@yonglinux ~]</code><code># sed -r 'N;s/(.*)\n(.*)/\2\n\1/' 1.txt</code>

<code>5e0eb</code>

<code>239fb</code>

<code>bb42c</code>

<code>a8b5f</code>

<code>2336b</code>

<code>9e242</code>

<code>4f2d5</code>

<code>5ecf1</code>

<code>ce886</code>

<code>8fd6b</code>

解释说明:

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

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

第二种方法:awk

<code>[root@yonglinux ~]</code><code># awk 'NR%2{a=$0;next}{print $0"\n"a}' 1.txt</code>

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

本文转自 模范生 51CTO博客,原文链接:http://blog.51cto.com/mofansheng/1696631,如需转载请自行联系原作者