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 awk
Lö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