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 指令误导了。
和 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)