Im Linux-Befehl mit wc -L
ist es möglich, die Länge der längsten Zeile einer Textdatei zu erhalten.Länge der kürzesten Linie?
Wie finde ich die Länge der kürzesten Zeile einer Textdatei?
Im Linux-Befehl mit wc -L
ist es möglich, die Länge der längsten Zeile einer Textdatei zu erhalten.Länge der kürzesten Linie?
Wie finde ich die Länge der kürzesten Zeile einer Textdatei?
Versuchen Sie folgendes:
awk '{print length}' <your_file> | sort -n | head -n1
Dieser Befehl ruft Längen aller Dateien, sortiert sie (richtig, als Zahlen) und fianlly, druckt die kleinste Zahl zu trösten.
Reine awk Lösung:
awk '(NR==1||length<shortest){shortest=length} END {print shortest}' file
Dies scheint etwas schneller. – ADTC
Ich drehte den awk-Befehl in einer Funktion (für bash):
function shortest() { awk '(NR==1||length<shortest){shortest=length} END {print shortest}' $1 ;} ## report the length of the shortest line in a file
hinzugefügt dies meine .bashrc (und dann „Quelle Bashrc ")
und dann lief es: kürzeste "yourFileNameHere"
[~]$ shortest .history 2
Es kann einer Variablen zugewiesen werden (man beachte die backtics erforderlich sind):
[~]$ var1=`shortest .history` [~]$ echo $var1 2
Für csh:
alias shortest "awk '(NR==1||length<shortest){shortest=length} END {print shortest}' \!:1 "
Beide awk
Lösungen von oben nicht umgehen '\ r' so wie es tut. Für eine einzeilige Eingabedatei sollten sie keine Werte erzeugen, die größer sind als die maximale Leitungslänge, die von wc -L
gemeldet wird.
Dies ist eine neue sed
basierte Lösung (ich war während abzukürzen nicht in der Lage richtig zu halten):
echo $((`sed 'y/\r/\n/' file|sed 's/./#/g'|sort|head -1|wc --bytes`-1))
Hier einige Beispiele sind, zeigt ‚\ r‘ Anspruch und demonstriert sed
Lösung:
$ echo -ne "\rABC\r\n" > file
$ wc -L file
3 file
$ awk '{print length}' file|sort -n|head -n1
5
$ awk '(NR==1||length<shortest){shortest=length} END {print shortest}' file
5
$ echo $((`sed 'y/\r/\n/' file|sed 's/./#/g'|sort|head -1|wc --bytes`-1))
0
$
$ echo -ne "\r\r\n" > file
$ wc -L file
0 file
$ echo $((`sed 'y/\r/\n/' file|sed 's/./#/g'|sort|head -1|wc --bytes`-1))
0
$
$ echo -ne "ABC\nD\nEF\n" > file
$ echo $((`sed 'y/\r/\n/' file|sed 's/./#/g'|sort|head -1|wc --bytes`-1))
1
$
http://superuser.com/q/135753/109661 – hovanessyan