Dois separadores de campo (dois pontos e espaço) no awk


8

Como podemos especificar dois separadores de campo no comando awk quando um deles é espaço? Eu acho que isso pode ser feito usando uma condição if-else incorporada no awk, no entanto, não tenho certeza sobre o comando exato.

O arquivo de amostra é como abaixo:

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

Quero imprimir a segunda coluna ($ 2). A produção esperada é:

Engineer
Doctor
GovntJob
Master

Quando tentei colocar o espaço e os dois pontos como separadores de campo, ele falhou com um erro de sintaxe:

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

Como podemos usar dois separadores de campo e utilizar a funcionalidade awk?


Além da resposta de Yeti, lembre-se de que o shell se divide em espaço em branco não citado para criar a lista de argumentos a serem despertados, portanto, em vez de -F[ :](um argumento), obteve -F[:e ]. Este gráfico é bastante útil (observe as setas verticais para aspas simples / duplas).
ArielCo 27/04/19

Obrigado ArielCo, muito apreciado!
Swapnil Dhule

Respostas:


13

Você está no caminho certo!
Basta adicionar as aspas ausentes [ :]:

awk -F'[ :]' '{print $2}' test.txt
Engineer
Doctor
GovntJob
Master
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.