更改文件中的行顺序

Ann*_*ond 11 linux command-line text-processing

我正在尝试更改特定模式中的行顺序。处理包含多行(例如 99 行)的文件。对于每三行,我希望第二行是第三行,第三行是第二行。

例子。

1-输入:

gi_1234
My cat is blue.
I have a cat.
gi_5678
My dog is orange.
I also have a dog.
...
Run Code Online (Sandbox Code Playgroud)

2- 输出:

gi_1234
I have a cat.
My cat is blue.
gi_5678
I also have a dog.
My dog is orange.
...
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 23

$ seq 9 | sed -n 'p;n;h;n;G;p'
1
3
2
4
6
5
7
9
8
Run Code Online (Sandbox Code Playgroud)

即,pRINT当前行,得到n分机之一,h旧它,得到的n分机一个,G等所保持的线(将其追加到图案空间),pRINT与所述第三和第二线2列图案空间交换。


Dop*_*oti 12

使用awk和整数数学:

awk 'NR%3 == 1 { print } NR%3 == 2 { delay=$0 } NR%3 == 0 { print; print delay; delay=""} END { if(length(delay) != 0 ) { print delay } }' /path/to/input
Run Code Online (Sandbox Code Playgroud)

取模运算符执行整数除法并返回余数,因此对于每一行,它将返回序列 1, 2, 0, 1, 2, 0 [...]。知道了这一点,我们只是将输入保存在模数为 2 的行上以备后用——也就是说,就在输入为零时打印输入之后。