如何从文件中选择某些行(n、n+4、n+8、n+12...)?

Vel*_*elu 10 text-processing

输入:

1
hgh
h2b
h4h
2
ok
koko
lkopk
3
uh
ju
nfjvn
4
Run Code Online (Sandbox Code Playgroud)

预期输出:

1
2
3
4
Run Code Online (Sandbox Code Playgroud)

所以,我只需要输出文件中文件的第 1、5、9、13 个值。这该怎么做?

Ste*_*itt 29

使用 AWK:

awk '!((NR - 1) % 4)' input > output
Run Code Online (Sandbox Code Playgroud)

弄清楚这是如何工作的,留给读者作为练习。

  • `NR % 4 == 1` 会更清晰 IMO。 (21认同)
  • 同意@Stéphane; 这对我来说可能是有问题的,但对于潜在的家庭作业问题,我试图混淆我的答案...... (13认同)

Fre*_*ddy 23

使用split (GNU coreutils):

split -nr/1/4 input > output
Run Code Online (Sandbox Code Playgroud)
  • -n生成CHUNKS输出文件

并且CHUNKS作为

  • r/K/N 使用循环分配,只将 N 的第 K 个输出到标准输出而不拆分行/记录


Sté*_*las 22

使用 GNU sed

sed '1~4!d' < input > output
Run Code Online (Sandbox Code Playgroud)

标准sed

sed -n 'p;n;n;n' < input > output
Run Code Online (Sandbox Code Playgroud)

with14in$n$i变量:

sed "$n~$i!d" # GNU only
Run Code Online (Sandbox Code Playgroud)
awk -v n="$n" -v i="$i" 'NR >= n && (NR % i) == (n % i)'
Run Code Online (Sandbox Code Playgroud)


wur*_*tel 7

添加强制性的 perl 解决方案:

perl -ne 'print if $. % 4 == 1' input > output
Run Code Online (Sandbox Code Playgroud)