Ik ben op zoek naar een eenvoudige manier om de lengte van de langste regel in een bestand te vinden. In het ideale geval zou het een eenvoudig bash-shell-commando zijn in plaats van een script.
Antwoord 1, autoriteit 100%
Wc (GNU coreutils) 7.4 gebruiken:
wc -L filename
geeft:
101 filename
Antwoord 2, autoriteit 40%
awk '{print length, $0}' Input_file |sort -nr|head -1
Ter referentie: De langste regel in een bestand zoeken
Antwoord 3, autoriteit 23%
awk '{ if (length($0) > max) {max = length($0); maxline = $0} } END { print maxline }' YOURFILE
Antwoord 4, autoriteit 8%
Gewoon voor de lol en voor educatieve doeleinden, de pure POSIX-shell-oplossing, zonder nutteloos gebruik van katten en zonder zich te richten op externe commando’s. Neemt bestandsnaam als eerste argument:
#!/bin/sh
MAX=0 IFS=
while read -r line; do
if [ ${#line} -gt $MAX ]; then MAX=${#line}; fi
done < "$1"
printf "$MAX\n"
Antwoord 5, autoriteit 4%
wc -L < filename
geeft
101
Antwoord 6, autoriteit 4%
perl -ne 'print length()." line $. $_"' myfile | sort -nr | head -n 1
Drukt de lengte, het regelnummer en de inhoud van de langste regel af
perl -ne 'print length()." line $. $_"' myfile | sort -n
Print een gesorteerde lijst van alle regels, met regelnummers en lengtes
.
is de aaneenschakelingsoperator – deze wordt hier gebruikt na length()
$.
is het huidige regelnummer
$_
is de huidige regel
Antwoord 7, autoriteit 2%
Kijkt al het antwoord geef niet het regelnummer van de langste regel. Het volgende commando kan het regelnummer en ongeveer de lengte geven:
$ cat -n test.txt | awk '{print "longest_line_number: " $1 " length_with_line_number: " length}' | sort -k4 -nr | head -3
longest_line_number: 3 length_with_line_number: 13
longest_line_number: 4 length_with_line_number: 12
longest_line_number: 2 length_with_line_number: 11
Antwoord 8, autoriteit 2%
Belangrijk over het hoofd gezien punt in de bovenstaande voorbeelden.
De volgende 2 voorbeelden tellen uitgevouwen tabbladen
wc -L <"${SourceFile}"
# or
expand --tabs=8 "${SourceFile}" | awk '{ if (length($0) > max) {max = length($0)} } END { print max }'
De volgende 2 tellen niet-uitgevouwen tabbladen.
expand --tabs=1 "${SourceFile}" | wc -L
# or
awk '{ if (length($0) > max) {max = length($0)} } END { print max }' "${SourceFile}"
dus
Expanded nonexpanded
$'nn\tnn' 10 5
Antwoord 9
In perl:
perl -ne 'print ($l = $_) if (length > length($l));' filename | tail -1
dit drukt alleen de regel af, niet ook de lengte.
Antwoord 10
Hier zijn referenties van het antwoord
cat filename | awk '{print length, $0}'|sort -nr|head -1
Antwoord 11
Ik werk in een Unix-omgeving en werk met gzipped-bestanden van een paar GB groot. Ik heb de volgende commando’s getest met een gzipped-bestand van 2 GB met een recordlengte van 2052.
zcat <gzipped file> | wc -L
en
zcat <gzipped file> | awk '{print length}' | sort -u
De tijden waren gemiddeld
-
117 seconden
-
109 seconden
Hier is mijn script na ongeveer 10 runs.
START=$(date +%s) ## time of start
zcat $1 | wc -L
END=$(date +%s) ## time of end
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"
START=$(date +%s) ## time of start
zcat $1 | awk '{print length}' | sort -u
END=$(date +%s) ## time of end
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"
Antwoord 12
Voor de lol, hier is de Powershell-versie:
cat filename.txt | sort length | select -last 1
En om de lengte te krijgen:
(cat filename.txt | sort length | select -last 1).Length
Antwoord 13
Variatie op het thema.
Deze toont alleregels met de lengte van de langste regel die in het bestand is gevonden, met behoud van de volgorde waarin ze in de bron verschijnen.
FILE=myfile grep `tr -c "\n" "." < $FILE | sort | tail -1` $FILE
Dus mijn bestand
x
mn
xyz
123
abc
zal geven
xyz
123
abc
Antwoord 14
Als u MacOS gebruikt en deze foutmelding krijgt:
wc: illegal option -- L
je hoeft GNU niet te installeren, doe dit gewoon.
Als u alleen het aantal tekens in de langste regel van het bestand wilt tellen en u OS X gebruikt, voert u het volgende uit:
awk '{print length}' "$file_name" | sort -rn | head -1
Zoiets;
echo "The longest line in the file $file_name has $(awk '{print length}' "$file_name" | sort -rn | head -1) characters"
Uitgangen:
The longest line in the file my_file has 117 characters