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

Comment pouvons-nous spécifier deux séparateurs de champs dans la commande awk quand lun deux est un 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.

Exemple de fichier 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 

Quand jai essayé de placer à la fois lespace et les deux points comme séparateurs de champs, 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?

Commentaires

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

Réponse

Vous êtes sur la bonne voie!
Ajoutez simplement les guillemets manquants autour de [ :]:

awk -F"[ :]" "{print $2}" test.txt Engineer Doctor GovntJob Master 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *