Jeg har denne fil
a deiauk Biking US 200 G b kespaul 202 A c deiauk NY 222 5 Z  Og jeg ønsker at matche den nøjagtige streng 200 ved hjælp af awk. Så mit resultat skal være 
a deiauk Biking US 200 G Her er min kode
awk -F " " "{if($(NF-1) ~ /200/){a[$1]++}}END{for (var in a){print a[var] " " var " " $(NF-1)}}" file.txt Men efter at jeg fik alle linjer.
Kommentarer
Svar
 Da du vil have et nøjagtigt match, hvorfor ikke bruge ==? 
$ 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  Du kan også begrænse din kamp med /^200$/: 
$ awk "$(NF-1)~/^200$/{a[$1]++}END{for (v in a){print v,a[v]}}" file a 2 b 1 Rediger:
 Jeg prøvede din kommando, og den skulle fungere. Er du sikker på din -F " "? 
Comm ents
-  Ja -F ' 'er fint i min ituaktion. Jeg ved ikke ' hvorfor, men jeg har stadig det samme problem
Svar
 Med awk, bare: 
awk "$0~/ 200 /" file  Eller sed (\s matcher ethvert hvidt mellemrum): 
sed -n "/\s200\s/p" file  A grep løsning (-P for perl regex): 
grep -P "\s200\s" file  Hvis det skal være rent bash: 
while read a; do [[ $a =~ " 200 " ]] && echo $a; done <file  Hvis du ikke er sikker på, om der er mellemrum, faner, hvad som helst ([[:space:]] ligner \s i sed og grep -løsningerne ovenfor ): 
while read a; do [[ $a =~ [[:space:]]200[[:space:]] ]] && echo $a; done <file Kommentarer
-  I grepdet fungerer uden-Pogså,grep '\s200\s' file
Svar
Jeg tror, at dette s hjælper. Dette udskriver kun linjen, der indeholder mønster. I dit tilfælde er mønster 200
grep "200" file-name 
awk-kode skal udskrive en enkelt linje? Gik du engang med at forstå, hvad dette skulle gøre?200; ii) det første felt og iii) det næstsidste felt. Hvorfor skulle du forvente, at det skulle udskrive hele linjen? Hvilket output får du faktisk?