Je cherche un moyen simple de trouver la longueur de la plus longue ligne d'un fichier. Idéalement, ce serait une simple commande shell bash au lieu d'un script.
198
Utilisation de wc (GNU coreutils) 7.4:
wc -L filename
donne:
101 filename
-c -l -m -w
options sont POSIX.-L
est un GNUisme.-L
dépend des paramètres régionaux. Certains caractères (à la fois dans l'octet et dans le sens multi-octets) peuvent même ne pas être comptés du tout!wc: illegal option -- L usage: wc [-clmw] [file ...]
gwc
est dans lacoreutils
formule, qui installe tous les coreutils GNU avec ung
préfixe.Pour référence : recherche de la ligne la plus longue dans un fichier
la source
END{}
bloc.la source
awk '{ if (length($0) > max) max = length($0) } END { print max }' YOURFILE
awk 'length>max{max=length}END{print max}' file
awk '{ if (length($0) > max) {max = length($0); maxline = $0} } END { print maxline }' YOURFILE | wc -c
Juste pour le plaisir et l'éducation, la solution shell POSIX pure , sans utilisation inutile de chat et sans bifurquer vers des commandes externes. Prend le nom de fichier comme premier argument:
la source
< "$1"
cela, il peut facilement lire depuis stdin. Avec un test,$#
il pourrait même faire les deux, selon le nombre d'arguments. Il n'y a tout simplement pas besoin de chats inutiles dans ce monde. Les débutants devraient être enseignés en conséquence dès le début.longest < /usr/share/dict/words
donne
la source
wc
sortie du nom de fichier :)Imprime la longueur, le numéro de ligne et le contenu de la ligne la plus longue
Imprime une liste triée de toutes les lignes, avec les numéros de ligne et les longueurs
.
est l'opérateur de concaténation - il est utilisé ici après la longueur ()$.
est le numéro de ligne actuel$_
est la ligne actuellela source
wc -L
est la meilleure solution que j'ai vue jusqu'à présent.wc -L
3 secondeswc -L
il suffit de compter les enregistrements de nombre - ce Q était sur le point de trouver la ligne la plus longue - pas tout à fait la même, donc ce n'est pas une comparaison précise.Point important négligé dans les exemples ci-dessus.
Les 2 exemples suivants comptent les onglets développés
Les 2 onglets suivants ne sont pas étendus.
alors
la source
On dirait que toute la réponse ne donne pas le numéro de ligne de la plus longue ligne. La commande suivante peut donner le numéro de ligne et la longueur approximative:
la source
awk '{print length}' test.txt | sort -rn | head -1
. Si vous avez également besoin du contenu de la ligne, alorsawk '{print length,$0}' test.txt | sort -k1 -rn| head -1
En perl:
cela imprime seulement la ligne, pas sa longueur aussi.
la source
Voici les références de la réponse
http://wtanaka.com/node/7719
la source
Juste pour le plaisir, voici la version Powershell:
Et pour obtenir juste la longueur:
la source
sort
prendre filename.txt comme argument? Ensuite, le chat est inutile carsort length filename.txt | select -last 1
évite un tuyau et un processus qui ne fait que copier les données.Je suis dans un environnement Unix et je travaille avec des fichiers compressés de quelques Go. J'ai testé les commandes suivantes en utilisant un fichier compressé de 2 Go avec une longueur d'enregistrement de 2052.
zcat <gzipped file> | wc -L
et
zcat <gzipped file> | awk '{print length}' | sort -u
Les temps étaient en moyenne
117 secondes
109 secondes
Voici mon script après environ 10 runs.
la source
awk
version bénéficie de la mise en cache de bloc de disque de lawc
version qui s'exécute en premier (et amorce le cache de disque). Vous devez randomiser l'ordre des personnes appelées en premier au cours des dix manches pour que cet argument reste fidèle.Variation sur le thème.
Celui-ci montrera toutes les lignes ayant la longueur de la plus longue ligne trouvée dans le fichier, en conservant l'ordre dans lequel elles apparaissent dans la source.
Alors monfichier
va donner
la source
Si vous utilisez MacOS et obtenez cette erreur:
wc: illegal option -- L
vous n'avez pas besoin d'installer GNU sipmly.Si tout ce que vous voulez faire, c'est simplement obtenir le nombre de caractères dans la plus longue ligne du fichier et vous utilisez OS X run:
awk '{print length}' "$file_name" | sort -rn | head -1
Quelque chose comme ça;
echo "The longest line in the file $file_name has $(awk '{print length}' "$file_name" | sort -rn | head -1) characters"
Les sorties:
The longest line in the file my_file has 117 characters
la source