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
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
NF
donne le nombre de champs pour un enregistrement donné:
[]$ echo "a b c d" | gawk '{print NF}'
4
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
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.