El punto clave aquí es que el carácter de tubería (|
) debe escaparse al shell. Use "\|
" o "'|'
" para protegerlo de la interacción con el shell y permita que se pase al awk
en la línea de comandos.
Leyendo los comentarios que veo que el cartel original presenta una versión simplificada del problema original que involucró filtrado file
antes de seleccionar e imprimir los campos. Se utilizó un pase a través de grep
y el resultado fue enviado a awk para la selección de campo. Eso explica el cat file
totalmente innecesario que aparece en la pregunta (reemplaza al grep <pattern> file
).
Bien, eso funcionará. Sin embargo, awk es en gran medida una herramienta de coincidencia de patrones por sí misma, y se puede confiar en que encuentre y trabaje en las líneas coincidentes sin necesidad de invocar grep
. Usar algo como:
awk -F\| '/<pattern>/{print $2;}{next;}' file
El bit /<pattern>/
dice awk
para realizar la acción que le sigue en las líneas que coincidan con <pattern>
.
El aspecto perdido {next;}
es una acción predeterminada que salta a la siguiente línea en la entrada. No parece ser necesario, pero tengo este hábito desde hace mucho tiempo ...
Tenga en cuenta que la clave del problema es el carácter de la tubería, no el comando utilizado. Pero esta es una buena solución. –
Lo pensé, pero prefiero tener una respuesta que explique el problema. Ese es el punto de mi comentario, de hecho. ;-) –
Sería 'cut -d '|' -f FIELDNUMBER FILENAME' – Andrea