84 votes

unix - nombre de colonnes dans le fichier

Étant donné un fichier avec des données comme celle-ci (c'est-à-dire le fichier stores.dat)

 sid|storeNo|latitude|longitude
2|1|-28.03720000|153.42921670
9|2|-33.85090000|151.03274200

Quelle serait une commande pour afficher le nombre de noms de colonnes ?

c'est-à-dire dans l'exemple ci-dessus, ce serait 4. (nombre de caractères pipe + 1 dans la première ligne)

Je pensais à quelque chose comme :

 awk '{ FS = "|" } ; { print NF}' stores.dat

mais il renvoie toutes les lignes au lieu de la première et pour la première ligne, il renvoie 1 au lieu de 4

133voto

Mat Points 104488
awk -F'|' '{print NF; exit}' stores.dat 

Quittez juste après la première ligne.

41voto

miku Points 63392

Ceci est une solution de contournement (pour moi : je n'utilise pas awk très souvent) :

Affichez la première ligne du fichier contenant les données, remplacez tous les tubes par des retours à la ligne puis comptez les lignes :

 $ head -1 stores.dat | tr '|' '\n' | wc -l

13voto

Tom van der Woerdt Points 18645

À moins que vous n'utilisiez des espaces, vous devriez pouvoir utiliser | wc -w sur la première ligne.

wc est "Word Count", qui compte simplement les mots dans le fichier d'entrée. Si vous n'envoyez qu'une seule ligne, il vous indiquera le nombre de colonnes.

6voto

Cat Kerr Points 44

Tu pourrais essayer

chat FICHIER | awk '{imprimer NF}'

2voto

Chris Koknat Points 1732

Solution Perl similaire à la solution awk de Mat :

 perl -F'\|' -lane 'print $#F+1; exit' stores.dat

J'ai testé cela sur un fichier avec 1000000 colonnes.


Si le séparateur de champ est un espace (un ou plusieurs espaces ou tabulations) au lieu d'une barre verticale :

 perl -lane 'print $#F+1; exit' stores.dat

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X