web-dev-qa-db-fra.com

espace unique comme séparateur de champ avec awk

J'ai affaire à un fichier où les champs sont séparés par un seul espace.

awk interprète le FS " " comme "un ou plusieurs espaces blancs", ce qui mal interprète mon fichier lorsque l'un des champs est vide.

J'ai essayé d'utiliser "un espace non suivi d'un espace" (" (?! )") comme FS mais awk ne prend pas en charge la recherche négative). "m'a seulement envoyé sur la page de manuel expliquant le traitement spécial de FS=" ". J'ai dû manquer la page de manuel correspondante ...

Comment puis-je utiliser un seul espace comme séparateur de champ avec awk?

9
antoine-sac

cela devrait fonctionner

$ echo 'a    b' | awk -F'[ ]' '{print NF}'
5

où as, cela traite tous les espaces blancs contigus comme un seul.

$ echo 'a    b' | awk -F' ' '{print NF}'
2

sur la base du commentaire, il faut une attention particulière, une chaîne vide ou un espace blanc car la valeur du champ sont des choses très différentes probablement pas une bonne correspondance pour un contenu séparé par un espace blanc.

Je suggère de prétraiter avec cut et de changer les délimiteurs, par exemple

$ echo 'a    b' | cut -d' ' -f1,3,5 --output-delimiter=,
a,,b
18
karakfa