Langste regel in een bestand

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

http://wtanaka.com/node/7719


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.

  1. zcat <gzipped file> | wc -L

en

  1. zcat <gzipped file> | awk '{print length}' | sort -u

De tijden waren gemiddeld

  1. 117 seconden

  2. 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 -- Lje 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

Other episodes