Deux séparateurs de champ (deux points et espace) dans awk

8

Comment pouvons-nous spécifier deux séparateurs de champ dans la commande awk lorsque l'un d'eux est l'espace? Je pense que cela peut être fait en utilisant une condition if-else intégrée dans awk, mais je ne suis pas sûr de la commande exacte.

Le fichier d'exemple est comme ci-dessous:

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

Je veux imprimer la deuxième colonne (2 $). La sortie attendue est:

Engineer
Doctor
GovntJob
Master

Lorsque j'ai essayé de mettre à la fois l'espace et les deux points comme séparateurs de champ, cela a échoué avec une erreur de syntaxe:

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

Comment pouvons-nous utiliser deux séparateurs de champs et utiliser la fonctionnalité awk?

Swapnil Dhule
la source
En plus de la réponse de Yeti, rappelez-vous que le shell se divise par des espaces blancs sans guillemets pour créer la liste des arguments à awk, donc au lieu de -F[ :](un argument), il a obtenu -F[:et ]. Ce graphique est assez pratique (notez les flèches verticales pour les guillemets simples / doubles).
arielCo
Merci ArielCo, très apprécié!
Swapnil Dhule

Réponses:

13

Tu es sur la bonne piste!
Ajoutez simplement les guillemets manquants [ :]:

awk -F'[ :]' '{print $2}' test.txt
Engineer
Doctor
GovntJob
Master
Swapnil Dhule
la source