如何使用awk打印具有特定字段值的有限数量的行

时间:2016-09-11 18:14:28

标签: awk sed gawk

如果我的文件格式如下:

a,city1
b,city1
.
.
z,city1
1,city2
2,city2
3,city2
.
.
10,city2

使用awk,我是否只能打印3条记录为city12的记录city2

a,city1
b,city1
c,city1
1,city2
2,city2

或者我可以在没有awk的情况下执行此操作吗?

3 个答案:

答案 0 :(得分:0)

$ awk -F, 'BEGIN{n["city1"]=3; n["city2"]=2} ($2 in n) && (c[$2]++<n[$2])' file
a,city1
b,city1
z,city1
1,city2
2,city2

我假设您在实际输入中有第二个字段值而不是city1和city2,否则解决方案更简单:

$ awk -F, 'BEGIN{n["city1"]=3; n["city2"]=2} c[$2]++<n[$2]' file
a,city1
b,city1
z,city1
1,city2
2,city2

答案 1 :(得分:0)

使用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

答案 2 :(得分:0)

hacky方式演示awk

的其他功能
$ awk -F, '/city[12]$/ && a[$2]++<4-substr($2,length($2),1)' file
a,city1
b,city1
c,city1
1,city2
2,city2