如何打印每 50 行中的第 15 行和第 25 行?

Moh*_*awy 10 sed text-processing

我有一个大文件,我想从每个连续的 50 行、第15行和第 25行进行打印。

sed -n '15,25p' inputfile
Run Code Online (Sandbox Code Playgroud)

如何修改此命令以仅打印第 15 行和第 25 行并循环遍历文件中的每 50 行。

Sté*_*las 22

awk 'NR % 50 == 15 || NR % 50 == 25'
Run Code Online (Sandbox Code Playgroud)

将是明显的便携方式。

请注意 GNUsed替代方案:

sed '15~50b;25~50b;d'
Run Code Online (Sandbox Code Playgroud)

使用 any sed,您可以随时执行以下操作:

sed -n 'n;n;n;n;n;n;n;n;n;n;n;n;n;n;p;n;n;n;n;n;n;n;n;n;n;p;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n'
Run Code Online (Sandbox Code Playgroud)

(获取下一行 14 次,打印,下一行 10 次,打印,下一行 25 次,返回到下一个循环(抓住丢失的额外行以制作 50))。


Arc*_*mar 10

这是一份工作 awk

awk '(NR%50==15) || (NR%50==25)' inputfile
Run Code Online (Sandbox Code Playgroud)

编辑:我被 OP 中的 sed 指令误导了。


Sun*_*eep 9

perl

1)与awk解决方案类似,$.变量存储行号

$ seq 135 | perl -ne 'print if $.%50==15 || $.%50==25'
15
25
65
75
115
125
Run Code Online (Sandbox Code Playgroud)

2)检查行号列表,更容易扩展

$ seq 135 | perl -ne 'print if grep {$_==$.%50} (15,25)'
15
25
65
75
115
125

$ seq 135 | perl -ne 'print if grep {$_==$.%50} (15,25,32)'
15
25
32
65
75
82
115
125
132
Run Code Online (Sandbox Code Playgroud)