Utiliser awk pour supprimer un champ se terminant par un certain caractère

Je suis plutôt nouveau à Unix en général et j’ai du mal à comprendre comment accomplir quelque chose que j’essaie de faire. Pour un disque ressemblant à ceci:

Name:Alice,ID:2368, Hometown:columbus,bithday:03/11/1988 Name:Bob,ID:2568,Hometown:New York,bithday:04-24-1985 Name:Ted,ID:2368, Hometown:Portland,bithday:06-11-1992 Name:Mark, ID:2218, Hometown:Palo Alto,bithday:04-23-1984 Name:Xiao, ID:2571, hometown:Carson,bithday:07/06/1975 Name:Rain, ID:0264, hometown:little stone,bithday:11-09-1982 Name:Susuan, ID:1261, Hometown:Menlo park,bithday:12-13-1989 Name:Zack, ID:1594, Hometown:columbus,bithday:02-04-1984 

Je veux supprimer toute colonne se terminant par un deux-points et en même temps sans aucune virgule.

Donc, une certaine ligne pourrait ressembler à ceci:

 Mark 2218 Palo Alto 04-23-1984 

J’ai examiné quelques exemples d’utilisation de awk et c’est mon idée jusqu’ici:

 awk 'BEGIN {FS=":"} ; {for (i=1; i<=NF; i++) 

Mon processus de pensée consiste à parcourir chaque ligne et à dire: «Si le champ se termine par un deux-points, supprimez-le et recherchez le prochain champ se terminant par deux-points, passez à la ligne suivante, etc. pour ce faire et je me bats parce que tous les tutoriels que j’ai vus jusqu’ici ne font rien de pareil. Si quelqu’un pouvait m’aider, je l’apprécierais sincèrement! Je vous serais reconnaissant de toute aide.

 $ cat file Name:Mark, ID:2218, Hometown:Palo Alto,bithday:04-23-1984 $ awk '{sub(/^[^:]*:/,""); gsub(/,[^:]+:/," ")}1' file Mark 2218 Palo Alto 04-23-1984 $ sed -e 's/^[^:]*://' -e 's/,[^:][^:]*:/ /g' file Mark 2218 Palo Alto 04-23-1984 

Le séparateur de champ awk peut être une expression régulière (dans GNU awk de toute façon). Définissez donc le FS comme une virgule ou un deux-points, puis imprimez tous les autres champs:

 awk -v FS='[,:]' '{for(i=2; i<=NF; i+=2) {printf "%s ", $i}; print ""}' 

Compte tenu de votre échantillon, vous obtenez:

 Alice 2368 columbus 03/11/1988 Bob 2568 New York 04-24-1985 Ted 2368 Portland 06-11-1992 Mark 2218 Palo Alto 04-23-1984 Xiao 2571 Carson 07/06/1975 Rain 0264 little stone 11-09-1982 Susuan 1261 Menlo park 12-13-1989 Zack 1594 columbus 02-04-1984