Eu tenho este arquivo
a deiauk Biking US 200 G b kespaul 202 A c deiauk NY 222 5 Z  E eu deseja corresponder à string exata 200 usando awk. Portanto, meu resultado deve ser 
a deiauk Biking US 200 G Aqui está meu código
awk -F " " "{if($(NF-1) ~ /200/){a[$1]++}}END{for (var in a){print a[var] " " var " " $(NF-1)}}" file.txt Mas depois que obtive todas as linhas.
Comentários
Resposta
 Já que você deseja uma correspondência exata, por que não usar ==? 
$ 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  Você também pode restringir sua correspondência com /^200$/: 
$ awk "$(NF-1)~/^200$/{a[$1]++}END{for (v in a){print v,a[v]}}" file a 2 b 1 Editar:
 Tentei seu comando e deve funcionar. Tem certeza de seu -F " "? 
Comm ents
-  Sim -F ' 'está bem na minha ituação. Eu não ' não sei por quê, mas ainda tenho o mesmo problema
Resposta
 Com awk, apenas: 
awk "$0~/ 200 /" file  Ou sed (\s corresponde a qualquer espaço em branco): 
sed -n "/\s200\s/p" file  A grep solução (-P para perl regex): 
grep -P "\s200\s" file  Se tiver que ser puro bash: 
while read a; do [[ $a =~ " 200 " ]] && echo $a; done <file  Se você “não tem certeza se há espaços, tabulações, qualquer coisa ([[:space:]] é como \s, nas soluções sed e grep acima ): 
while read a; do [[ $a =~ [[:space:]]200[[:space:]] ]] && echo $a; done <file Comentários
-  Em grepfuncionará sem-Ptambém,grep '\s200\s' file
Resposta
Eu acho que s vai ajudar. Isso imprimirá apenas a linha que contém o padrão. No seu caso, o padrão é 200
grep "200" file-name 
awkimprima um linha única? Você ao menos se preocupou em entender o que isso deveria fazer?200; ii) o primeiro campo e iii) o penúltimo campo. Por que você esperaria que ele imprimisse a linha inteira? Qual saída você está realmente obtendo?