Awk: coincide con la cadena exacta en la línea

Tengo este archivo

a deiauk Biking US 200 G b kespaul 202 A c deiauk NY 222 5 Z 

Y yo desea hacer coincidir la cadena exacta 200 usando awk. Entonces mi resultado debería ser

a deiauk Biking US 200 G 

Aquí está mi código

awk -F " " "{if($(NF-1) ~ /200/){a[$1]++}}END{for (var in a){print a[var] " " var " " $(NF-1)}}" file.txt 

Pero después que tengo todas las líneas.

Comentarios

  • ¿Por qué espera que su código awk imprima un ¿Una sola línea? ¿Se molestó siquiera en comprender lo que se supone que debe hacer?
  • Su awk imprimirá i) la cantidad de veces que ha visto este primer campo donde el penúltimo campo es 200; ii) el primer campo y iii) el penúltimo campo. ¿Por qué esperaría que imprima la línea completa? ¿Qué resultado está obteniendo realmente?

Respuesta

Ya que desea una coincidencia exacta, ¿por qué no 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 

También puede restringir su coincidencia con /^200$/:

$ awk "$(NF-1)~/^200$/{a[$1]++}END{for (v in a){print v,a[v]}}" file a 2 b 1 

Editar:

Probé tu comando y debería funcionar. ¿Estás seguro de tu -F " "?

Comm ents

  • -F ' ' está bien en mi ituaction. No ' no sé por qué, pero sigo teniendo el mismo problema

Responder

Con awk, simplemente:

awk "$0~/ 200 /" file 

O sed (\s coincide con cualquier espacio en blanco):

sed -n "/\s200\s/p" file 

A grep solución (-P para perl regex):

grep -P "\s200\s" file 

Si tiene que ser puro bash:

while read a; do [[ $a =~ " 200 " ]] && echo $a; done <file 

Si «no está seguro de si hay espacios, pestañas, lo que sea ([[:space:]] es como \s, en las soluciones sed y grep anteriores ):

while read a; do [[ $a =~ [[:space:]]200[[:space:]] ]] && echo $a; done <file 

Comentarios

  • En grep funcionará sin -P también, grep '\s200\s' file

Respuesta

Creo que esto s ayudará. Esto imprimirá solo la línea que contiene el patrón. En su caso, el patrón es 200

grep "200" file-name 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *