web-dev-qa-db-fra.com

Nombre de champs retournés par awk

Existe-t-il un moyen de demander à awk de renvoyer le nombre de champs répondant à un critère de séparateur de champs? Dites, par exemple, que mon fichier contient 

a b c d

oui, awk --field-separator=" " | <something> devrait renvoyer 4 

18
Sriram

La variable NF

affichera

4

Notez cependant que:

echo -e "a b c d\na b" | awk --field-separator = "" "{print NF}"

affichera:

4 
 2

J'espère que cela aide, et joyeux wking

48
Douglas Meyer

NF donne le nombre de champs pour un enregistrement donné:

[]$ echo "a b c d" | gawk '{print NF}'
4
5
Mark Wilkins

Si vous souhaitez connaître l'ensemble des numéros de champs d'un contenu multiligne, vous pouvez exécuter:

X | awk '{print NF}' | sort -n | uniq

étant X une commande qui affiche le contenu dans la sortie standard: cat, echo, etc. Exemple:

Avec fichier.txt:

a b
b c
c d
e t a
e u

La commande cat file.txt | awk '{print NF}' | sort -n | uniq affichera:

2
3

Et avec file2.txt:

a b
b c
c d
e u

La commande cat file2.txt | awk '{print NF}' | sort -n | uniq affichera:

2
2
axelbrz

awk (1) sur FreeBSD ne reconnaît pas --field-separator. Utilisez -v à la place:

echo "a b c d" | awk -v FS=" " "{ print NF }"

C'est un moyen POSIX portable pour définir le séparateur de champs.

0