Comment imprimer le nombre de caractères de chaque ligne d'un fichier texte
Je voudrais imprimer le nombre de caractères dans chaque ligne d'un fichier texte à l'aide d'une commande unix. Je sais que c'est simple avec powershell
gc abc.txt | % {$_.length}
mais j'ai besoin de commande unix.
- [citation nécessaire].
Vous devez vous connecter pour publier un commentaire.
Utiliser Awk.
print length;
est équivalent et POSIX ainsi pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.htmlC'est POSIX, donc cela devrait fonctionner partout.
Edit: Ajout d'-r comme suggéré par William.
Edit: Méfiez-vous de la gestion de l'Unicode. Bash et zsh, à définir correctement les paramètres régionaux, permettra d'afficher le nombre de codepoints, mais dash va montrer octets—donc vous devez vérifier que votre shell. Et puis il y a beaucoup d'autres définitions possibles de longueur en Unicode de toute façon, donc cela dépend de ce que vous voulez vraiment.
Ici est un exemple de l'aide
xargs
:J'ai essayé les autres réponses ci-dessus, mais ils sont très loin d'être décent solutions lorsque vous traitez avec de gros fichiers, surtout une fois qu'une seule ligne de la taille occupe plus de ~1/4 de la quantité de RAM disponible.
À la fois bash, awk slurp l'ensemble de la ligne, même si pour ce problème, il n'est pas nécessaire. Bash seront erreur une fois qu'une ligne est trop longue, même si vous disposez de suffisamment de mémoire.
J'ai mis en place extrêmement simple, assez unoptimized script python que lorsqu'il est testé avec des fichiers de grande taille (~4 GO par ligne) n'a pas de slurp, et est de loin une meilleure solution que celles qui sont indiquées.
Si c'est le temps de code critique de la production, vous pouvez réécrire les idées en C ou d'effectuer de meilleures optimisations sur l'appel read (au lieu de la simple lecture d'un octet à la fois), après les tests que c'est en effet un goulot d'étranglement.
Code suppose que le saut de ligne est un caractère de saut de ligne, ce qui est une bonne hypothèse pour Unix, mais YMMV sur Mac OS/Windows. Vérifiez que le fichier se termine par un saut de ligne pour s'assurer que la dernière ligne, le nombre de caractères n'est pas négligé.
Essayez ceci:
echo -e | wc -m
, n'est-ce pas? Il est inutile d'utiliser des commandes shell peut compter les caractères dans une variable. Plusecho -e
est totalement incompatible et travaille dans la moitié des coques tout en commençant par la séquence d'échappement fonctionne dans certains autres, et rien dans le reste.Ne pas utiliser AWK, utilisez
sed
à la place! Par à l'aide de sed, vous pouvez simuler plein decadic ajouté:Cette commande permet d'afficher le nombre de caractères dans chaque ligne du fichier texte
abc.txt
.