usage print externas ejemplos bash unix shell awk ksh

bash - print - ¿Cómo imprimo un campo de un archivo separado por tubería?



awk variables shell (4)

Tengo un archivo con campos separados por caracteres de tubería y quiero imprimir solo el segundo campo. Este intento falla:

$ cat file | awk -F| ''{print $2}'' awk: syntax error near line 1 awk: bailing out near line 1 bash: {print $2}: command not found

¿Hay alguna forma de hacer esto?


El carácter de tubería debe escaparse para que el intérprete de comandos no lo interprete. Una solución simple:

$ awk -F/| ''{print $2}'' file

Otra opción sería citar al personaje:

$ awk -F''|'' ''{print $2}'' file


El punto clave aquí es que el carácter de la tubería ( | ) debe escaparse al caparazón. Use " /| " o " ''|'' "para protegerlo de la interferencia del intérprete de comandos y permitir que pase a awk en la línea de comando.

Al leer los comentarios, veo que el póster original presenta una versión simplificada del problema original que implicaba filtrar el file antes de seleccionar e imprimir los campos. Se utilizó un paso a través de grep y el resultado se canalizó a awk para la selección de campo. Eso explica el cat file totalmente innecesario que aparece en la pregunta (reemplaza el 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 . Use algo como:

awk -F/| ''/<pattern>/{print $2;}{next;}'' file

El /<pattern>/ bit le dice a awk que realice la acción que sigue en las líneas que coinciden 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 de hace mucho tiempo ...


O solo usa un comando:

cut -d ''|'' -f FIELDNUMBER


Y ''archivo'' no contiene símbolos de tubería, por lo que no imprime nada. Debería usar ''cat file'' o simplemente listar el archivo después del programa awk.