Mi archivo ficticio se ve así:
C1 C2 C3
1 a snow
2 b snowman
snow c sowman
Quiero obtener una línea si hay una cadena snow
en $ 3. Puedo hacer esto así:
awk '($3=="snow" || $3=="snowman") {print}' dummy_file
Pero debería haber una forma más sencilla.
'$3~/snow/'
suficienteTambién es posible buscando una subcadena con la función index ():
awk '(index($3, "snow") != 0) {print}' dummy_file
Versión más corta:
awk 'index($3, "snow")' dummy_file
fuente
awk 'index($3, "snow")' dummy_file
Tal vez esto ayude
http://www.math.utah.edu/docs/info/gawk_5.html
awk '$3 ~ /snow|snowman/' dummy_file
fuente
Imprima líneas donde el tercer campo sea
snow
osnowman
solo:awk '$3~/^snow(man)?$/' file
fuente
GNU sed
sed '/\s*\(\S\+\s\+\)\{2\}\bsnow\(man\)\?\b/!d' file
Entrada:
..salida:
fuente
sed
para palabras completas. Aunque técnicamente posible, para que eso funcione de manera confiable, tuve que usar mirar atrás, mirar hacia adelante y!?
construcciones cuando se trataba de palabras que no deberían seguir. Esto no es nada para los débiles de corazón, eso es seguro. (Y propenso a errores que pueden consumir mucho tiempo para encontrarlos y corregirlos).