2016-09-11 4 views
0

begrenzte Anzahl von Zeilen mit bestimmten Feldwert drucken Wenn ich die Datei in folgendem Format haben:Wie mit awk

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

awk verwenden, kann ich nur 3 Aufzeichnungen drucken mit city1 und 2 Aufzeichnungen mit city2

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

Oder kann ich es ohne awk tun?

Antwort

0

hacky Weg demonstrieren Sie weitere Merkmale von awk

$ awk -F, '/city[12]$/ && a[$2]++<4-substr($2,length($2),1)' file 
a,city1 
b,city1 
c,city1 
1,city2 
2,city2 
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 

Ich nehme an, Sie anderen zweiten Feldwerte als city1 und city2 in Ihrem realen Eingang haben, sonst ist die Lösung noch einfacher:

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

Vielen Dank für die Hilfe. – user6817864

+1

Gern geschehen, bitte besuchen Sie http://StackOverflow.com/Help/Someone-answers und akzeptieren Sie eine Antwort. –

0

Mit 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 
+0

Vielen Dank für die Hilfe. – user6817864