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
,其中我为键 2
、3
和 7
设置了值。如果当前数字行 (NR
) 是我设置的键之一 print
表示行。
(在 gawk 4.2.1 中测试)
用字符class匹配2
3
或7
和FNR
匹配当前文件的记录号:
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
我想从文件中提取 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
,其中我为键 2
、3
和 7
设置了值。如果当前数字行 (NR
) 是我设置的键之一 print
表示行。
(在 gawk 4.2.1 中测试)
用字符class匹配2
3
或7
和FNR
匹配当前文件的记录号:
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