Ein Skript, das die Zeilen einer Datei mit ihrer Länge druckt

Ein Skript, das die Zeilen einer Datei mit ihrer Länge druckt

Ich arbeite an einer Aufgabe, bei der ich ein Skript erstellen soll, das einen Dateinamen als Parameter erhält und dann alle Zeilen in der Datei plus ihre Länge am Ende ausdrucken soll, zum Beispiel: Banana Milk => Banana Milk 11 Unix und Linux => Unix und Linux 14 MacBook Pro => MacBook Pro 11

Antwort1

Dadurch wird jede Zeile in einer Datei gedruckt, gefolgt von der Zeilenlänge (in Bezug auf die Anzahl der Zeichen ohne Zeilenbegrenzer in POSIX-kompatiblen awk-Implementierungen, obwohl bei einigen stattdessen die Anzahl der Bytes angegeben wird).

<FOO awk '{print $0,length}'

Ich bin mir jedoch nicht sicher, ob Sie das fragen.

Antwort2

Diese awkLösung ist die beste, aber wenn Sie awk nicht verwenden möchten, gibt es hier einige Alternativen:

while IFS= read -r line
do
        printf "%s %d\n" "$line" "${#line}"
done < "$1"
while IFS= read -r line
do
        printf "%s %d\n" "$line" "$(expr "$line" : '.*')"
done < "$1"
while IFS= read -r line
do
        printf "%s %d\n" "$line" "$(printf "%s" "$line" | wc -c)"
done < "$1"
while IFS= read -r line
do
        printf "%s %d\n" "$line" "$(wc -c <<< "$line")"
done < "$1"

Die wc -c <<< "$line"Variante gibt Zahlen aus, die um eins höher sind als die anderen, weil sie eine neue Zeile enthält.

Antwort3

Ich bin mir nicht ganz sicher, wonach Sie suchen. Das folgende Skript sollte genau die gewünschte Ausgabe liefern.

#!/bin/bash
cat $1
cat $1 | wc -m

verwandte Informationen