如何使用awk打印具有特定字段值的有限行数
How to print limited number of lines having specific field value with awk
如果我有以下格式的文件:
a,city1
b,city1
.
.
z,city1
1,city2
2,city2
3,city2
.
.
10,city2
使用 awk,我可以只打印 3
条记录 city1
和 2
条记录 city2
a,city1
b,city1
c,city1
1,city2
2,city2
或者我可以不用 awk
吗?
$ awk -F, 'BEGIN{n["city1"]=3; n["city2"]=2} ( in n) && (c[]++<n[])' file
a,city1
b,city1
z,city1
1,city2
2,city2
我假设你的真实输入中除了 city1 和 city2 之外还有其他第二个字段值,否则解决方案更简单:
$ awk -F, 'BEGIN{n["city1"]=3; n["city2"]=2} c[]++<n[]' file
a,city1
b,city1
z,city1
1,city2
2,city2
和grep
$ cat ip.txt
a,city1
b,city1
c,city1
d,city1
z,city1
1,city2
2,city2
3,city2
4,city2
10,city2
$ grep -m 3 'city1' ip.txt ; grep -m 2 'city2' ip.txt
a,city1
b,city1
c,city1
1,city2
2,city2
演示 awk
其他功能的 hacky 方式
$ awk -F, '/city[12]$/ && a[]++<4-substr(,length(),1)' file
a,city1
b,city1
c,city1
1,city2
2,city2
如果我有以下格式的文件:
a,city1
b,city1
.
.
z,city1
1,city2
2,city2
3,city2
.
.
10,city2
使用 awk,我可以只打印 3
条记录 city1
和 2
条记录 city2
a,city1
b,city1
c,city1
1,city2
2,city2
或者我可以不用 awk
吗?
$ awk -F, 'BEGIN{n["city1"]=3; n["city2"]=2} ( in n) && (c[]++<n[])' file
a,city1
b,city1
z,city1
1,city2
2,city2
我假设你的真实输入中除了 city1 和 city2 之外还有其他第二个字段值,否则解决方案更简单:
$ awk -F, 'BEGIN{n["city1"]=3; n["city2"]=2} c[]++<n[]' file
a,city1
b,city1
z,city1
1,city2
2,city2
和grep
$ cat ip.txt
a,city1
b,city1
c,city1
d,city1
z,city1
1,city2
2,city2
3,city2
4,city2
10,city2
$ grep -m 3 'city1' ip.txt ; grep -m 2 'city2' ip.txt
a,city1
b,city1
c,city1
1,city2
2,city2
演示 awk
$ awk -F, '/city[12]$/ && a[]++<4-substr(,length(),1)' file
a,city1
b,city1
c,city1
1,city2
2,city2