Dos separadores de campo (dos puntos y espacio) en awk


8

¿Cómo podemos especificar dos separadores de campo en el comando awk cuando uno de ellos es espacio? Creo que esto se puede hacer utilizando una condición if-else incrustada en awk, sin embargo, no estoy seguro sobre el comando exacto.

El archivo de muestra es el siguiente:

cat test.txt
Swapnil Engineer 20000
Avinash:Doctor:30000
Dattu GovntJob 50000
Amol:Master:10000

Quiero imprimir la segunda columna ($ 2). La salida esperada es:

Engineer
Doctor
GovntJob
Master

Cuando intenté poner el espacio y los dos puntos como separadores de campo, falló con un error de sintaxis:

awk -F[ :] '{print $2}' test.txt
awk: cmd. line:1: :]
awk: cmd. line:1: ^ syntax error

¿Cómo podemos usar dos separadores de campo y utilizar la funcionalidad awk?


Además de la respuesta de Yeti, recuerde que el shell se divide por espacios en blanco sin comillas para crear la lista de argumentos para awk, por lo que en lugar de -F[ :](un argumento ) obtuvo -F[:y ]. Este gráfico es bastante útil (tenga en cuenta las flechas verticales para comillas simples / dobles).
arielCo

Gracias ArielCo, muy apreciado!
Swapnil Dhule

Respuestas:


13

¡Estás en el camino correcto!
Simplemente agregue las citas que faltan alrededor [ :]:

awk -F'[ :]' '{print $2}' test.txt
Engineer
Doctor
GovntJob
Master
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.