67 votes

Comment compter le nombre de lignes et de colonnes dans un fichier en utilisant bash ?

Disons que j'ai un grand fichier avec de nombreuses lignes et de nombreuses colonnes. Je voudrais savoir combien de lignes et de colonnes j'ai en utilisant bash.

103voto

Erik Points 38942

Colonnes : awk '{print NF}' file | sort -nu | tail -n 1

Utilisez head -n 1 pour le nombre de colonnes le plus bas, tail -n 1 pour le nombre de colonnes le plus élevé.

Des rangs : cat file | wc -l o wc -l < file pour le UUOC foule.

15voto

GGibson Points 182

Une autre solution pour compter les colonnes est de compter les séparateurs entre les colonnes. Je trouve que c'est un bon équilibre entre la brièveté et la facilité à se souvenir. Bien sûr, cela ne fonctionnera pas si vos données incluent le séparateur de colonne.

head -n1 myfile.txt | grep -o " " | wc -l

Utilisations head -n1 pour saisir la première ligne du fichier. Utilise grep -o pour compter tous les espaces, et afficher chaque espace trouvé sur une nouvelle ligne. Utilise wc -l pour compter le nombre de lignes.

EDIT : Comme Gaurav Tuli le fait remarquer ci-dessous, j'ai oublié de mentionner que vous devez mentalement ajouter 1 au résultat, ou sinon script ce calcul.

12voto

Fabio Points 121

Si votre fichier est volumineux mais que vous êtes certain que le nombre de colonnes reste le même pour chaque ligne (et que vous n'avez pas d'en-tête), utilisez :

head -n 1 FILE | awk '{print NF}'

pour trouver le nombre de colonnes, où FICHIER est le nom de votre fichier.

Pour trouver le nombre de lignes, 'wc -l FILE' fonctionnera.

9voto

FatihSarigol Points 139

Un petit changement à la réponse de kirill_igum, et vous pouvez facilement compter le nombre de colonnes de n'importe quelle ligne que vous voulez, ce qui est la raison pour laquelle je suis venu à cette question, même si la question demande le fichier entier. (Bien que si votre fichier a les mêmes colonnes dans chaque ligne, cela fonctionne aussi bien sûr) :

head -2 file |tail -1 |tr '\t' '\n' |wc -l

Donne le nombre de colonnes de la ligne 2. Remplacez 2 par 55 par exemple pour obtenir la ligne 55.

-bash-4.2$ cat file
1       2       3
1       2       3       4
1       2
1       2       3       4       5

-bash-4.2$ head -1 file |tail -1 |tr '\t' '\n' |wc -l
3
-bash-4.2$ head -4 file |tail -1 |tr '\t' '\n' |wc -l
5

Le code ci-dessus fonctionne si votre fichier est séparé par des tabulations, comme nous le définissons à "tr". Si votre fichier a un autre séparateur, par exemple des virgules, vous pouvez toujours compter vos "colonnes" en utilisant la même astuce, en changeant simplement le caractère séparateur "t" en "," :

-bash-4.2$ cat csvfile
1,2,3,4
1,2
1,2,3,4,5
-bash-4.2$ head -2 csvfile |tail -1 |tr '\,' '\n' |wc -l
2

6voto

Sanaulla Haq Points 11

Pour les lignes, vous pouvez simplement utiliser wc -l file

-l représente la ligne totale

pour les colonnes, vous pouvez simplement utiliser head -1 file | tr ";" "\n" | wc -l

Explication
head -1 file
Saisir la première ligne de votre fichier, qui devrait être l'en-tête, et l'envoie au cmd suivant à travers le pipe.
| tr ";" "\n"

tr signifie "traduire".
Il traduira tous les ; en un caractère de nouvelle ligne.
Dans cet exemple ; est votre délimiteur.

Puis il envoie les données à la commande suivante.

wc -l
Compte le nombre total de lignes.

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