La solution la plus simple consiste à concaténer tous les fichiers et à diriger le résultat vers votre script:
cat ./* | awk '{ if ( length > L ) { L=length} }END{ print L}'
Vous pouvez également transmettre directement plusieurs fichiers à awk:
awk '{ if ( length > L ) { L=length} }END{ print L}' ./*
Bien sûr, il peut y avoir des avertissements si les fichiers sont en fait des répertoires mais cela devrait être inoffensif. Vous pouvez avoir de plus gros problèmes avec les fichiers binaires car ils n'ont pas de concept de ligne . Donc, pour être plus précis, vous pouvez faire quelque chose comme
awk '{ if ( length > L ) { L=length} }END{ print L}' ./*.txt
pour correspondre uniquement aux .txt
fichiers du répertoire en cours.
Et, comme @ G-Man l'a déclaré dans son commentaire, *
ne correspondra pas aux fichiers cachés (en commençant par un point). Si vous les voulez, utilisez * .*
.
cat * .* | ...
. Ou éliminez l' utilisation inutile de chat et ditesawk '...' * .*
.Avec GNU
wc
:-L
imprime la longueur de la ligne la plus longue.la source
Si vous voulez la longueur maximale par fichier, avec GNU awk:
Ou la seule longueur maximale dans tous les fichiers:
Cela suppose que les fichiers se terminent par des caractères de nouvelle ligne. Si un fichier ne se termine pas par un caractère de nouvelle ligne, sa dernière ligne non délimitée sera fusionnée avec la première ligne du fichier suivant et annulera éventuellement votre résultat.
-size +1c
est une optimisation car les fichiers texte qui sont vides ou contiennent un seul caractère ont respectivement 0 ligne et 1 ligne vide, donc n'auront pas la ligne la plus longue.la source
Également avec GNU wc (coreutils 8.4), il peut gérer plusieurs fichiers
la source
wc -L
, mais votre solution a l'inconvénient que vous devez d'abord parcourir la longueur maximale de tous les autres fichiers. Y a-t-il un avantage à cela?