UNIX:使用 sed,如何以 4 行为一组打印每 1 行和 2 行?

UNIX:使用 sed,如何以 4 行为一组打印每 1 行和 2 行?

我的文件有多组行。每组有 4 行。第 1-4 行是第 1 组。第 5-8 行是第 2 组,依此类推。我需要打印每组的前两行,即第 1 行和第 2 行、第 5 行和第 6 行,依此类推。

文件内容:

line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
..
line n

答案1

sed -n '1~4p;2~4p'

1~4p从第一行开始,每 4 行匹配一次:

line 1
line 5
line 9

2~4p从第二行开始,每 4 行匹配一次:

line 2
line 6
line 10

当一起使用时,它们可以达到您想要的效果。

答案2

我不认为sed这是这里选择的工具 —— 为什么不直接用 shell 脚本来写呢?

cat /path/to/infile | while true; do read l || break ; echo "$l" ; read l || break ; echo "$l" ; read l || break ; read l || break ; done > /path/to/outfile

相关内容