Select 有 awk 但没有范围的特定行

Select specific lines with awk but not range

我想从文件中提取 select 行。我对三个特定的行感兴趣。

输入:

line1
line2
line3
line4
line5
line6
line7

输出:

line2
line3
line7

没有特定的 selecting 行模式。 我熟悉 sed 解决方案:

sed -n '2p; 3p; 7p' file

不过我之后使用 awk select 这些行的特定字段。因此,我宁愿单独使用 awk 而不是管道 sed 和 awk。我仍然找不到 awk 的简单解决方案。

awk 'FNR ~ /^(2|3|7)$/{print}'

应该很巧妙地完成技巧

我会利用 GNU AWK 来完成这项任务,让 file.txt 内容成为

line1
line2
line3
line4
line5
line6
line7

然后

awk 'BEGIN{a[2]=a[3]=a[7]=1}(NR in a){print}' file.txt

输出

line2
line3
line7

说明:我使用数组 a,其中我为键 237 设置了值。如果当前数字行 (NR) 是我设置的键之一 print 表示行。

(在 gawk 4.2.1 中测试)

用字符class匹配237FNR匹配当前文件的记录号:

awk 'FNR ~ /^[237]$/' file

输出

line2
line3
line7

如果你有一个大文件并且你知道最大行数,你也可以在到达它时停止处理:

awk 'FNR ~ /^[237]$/{
  print
  if (FNR == 7) exit
}' file
$ awk 'BEGIN{split("2 3 7",tmp); for (i in tmp) nrs[tmp[i]]} NR in nrs' file
line2
line3
line7