Ich habe diese Datei
a deiauk Biking US 200 G b kespaul 202 A c deiauk NY 222 5 Z
und ich Sie möchten die genaue Zeichenfolge 200 mit awk
abgleichen. Mein Ergebnis sollte also
a deiauk Biking US 200 G
sein. Hier ist mein Code
awk -F " " "{if($(NF-1) ~ /200/){a[$1]++}}END{for (var in a){print a[var] " " var " " $(NF-1)}}" file.txt
Aber danach dass ich alle Zeilen habe.
Kommentare
- Warum soll Ihr
awk
-Code a drucken? Haben Sie sich überhaupt die Mühe gemacht zu verstehen, was dies tun soll? - Ihre awk druckt i) wie oft Sie dieses erste Feld gesehen haben, in dem das vorletzte Feld ; ii) das 1. Feld und iii) das vorletzte Feld. Warum sollten Sie damit rechnen, dass die gesamte Zeile gedruckt wird? Welche Ausgabe erhalten Sie tatsächlich?
Antwort
Da Sie eine genaue Übereinstimmung wünschen, können Sie ==
verwenden.
$ cat >file a deiauk Biking US 200 G b kespaul 202 A c deiauk NY 222 5 Z a auie auie 200 B b nrst nrst 200 C $ awk "$(NF-1)==200{a[$1]++}END{for (v in a){print v,a[v]}}" file a 2 b 1
Sie können Ihre Übereinstimmung auch mit /^200$/
einschränken:
$ awk "$(NF-1)~/^200$/{a[$1]++}END{for (v in a){print v,a[v]}}" file a 2 b 1
Bearbeiten:
Ich habe Ihren Befehl ausprobiert und er sollte funktionieren. Sind Sie sicher, dass Sie -F " "
?
Comm ents
Antwort
Mit awk
nur:
awk "$0~/ 200 /" file
Oder sed
(\s
entspricht einem beliebigen Leerzeichen):
sed -n "/\s200\s/p" file
A grep
Lösung (-P
für Perl-Regex):
grep -P "\s200\s" file
Wenn es rein sein muss bash
:
while read a; do [[ $a =~ " 200 " ]] && echo $a; done <file
Wenn Sie nicht sicher sind, ob Leerzeichen oder Tabulatoren vorhanden sind ( ist wie \s
in den obigen Lösungen sed
und grep
):
while read a; do [[ $a =~ [[:space:]]200[[:space:]] ]] && echo $a; done <file
Kommentare
- In
grep
es funktioniert auch ohne-P
,grep '\s200\s' file
Antwort
Ich denke das s wird helfen. Dadurch wird nur die Zeile gedruckt, die das Muster enthält. In Ihrem Fall ist das Muster 200
grep "200" file-name
-F ' '
ist in meiner Aktion in Ordnung. Ich ' weiß nicht warum, aber ich habe immer noch das gleiche Problem