Due separatori di campo (due punti e spazio) in awk


8

Come possiamo specificare due separatori di campo nel comando awk quando uno di questi è spazio? Penso che ciò possa essere fatto usando una condizione if-else incorporata in awk, tuttavia non sono sicuro del comando esatto.

Il file di esempio è il seguente:

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

Voglio stampare la seconda colonna ($ 2). L'output previsto è:

Engineer
Doctor
GovntJob
Master

Quando ho provato a mettere sia lo spazio che i due punti come separatori di campo, non è riuscito con un errore di sintassi:

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

Come possiamo usare due separatori di campo e utilizzare la funzionalità awk?


Oltre alla risposta di Yeti, ricorda che la shell si divide in spazi bianchi non quotati per creare l'elenco di argomenti da awk, quindi invece di -F[ :](un argomento ) ha ottenuto -F[:e ]. Questo grafico è abbastanza utile (nota le frecce verticali per virgolette singole / doppie).
arielCo

Grazie ArielCo, molto apprezzato!
Swapnil Dhule,

Risposte:


13

Sei sulla strada giusta!
Aggiungi solo le virgolette mancanti in giro [ :]:

awk -F'[ :]' '{print $2}' test.txt
Engineer
Doctor
GovntJob
Master
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.