Durchführen mehrzeiliger String-Operationen mit awk statt mit einer For-Schleife

Durchführen mehrzeiliger String-Operationen mit awk statt mit einer For-Schleife

Nehmen Sie eine mehrzeilige Textdatei ( file1) an, die Dateipfade enthält.

$ cat file1
./foo/foo
./foo/bar
./foo/baz

Ich möchte nur die Dateinamen speichern file2und jedem Dateinamen einige Sonderzeichen voranstellen (z. B. [#).

Ich weiß, dass ich dies mit einer einfachen For-Schleife erreichen kann, verstehe aber, dass dies als ungünstige Vorgehensweise gilt.

for line in $(cat file1); do
echo "[#" $(basename "$line") >> file2;
done

Ich glaube, diese Aufgabe kann sauberer über erledigt werden awk, aber der folgende Code ist nur ein Fragment. Wie führe ich die obige Aufgabe mit aus awk?

awk '{print "[#",$0=$(basename $0)}' $file1 > $file2

Antwort1

/Als Feldtrennzeichen verwenden und das letzte Feld drucken:

$ awk -F/ '{print "[#"$NF}' file1
[#foo
[#bar
[#baz

Antwort2

sed -e 's|.*/|[#|' file1

Ergebnis

[#foo
[#bar
[#baz

verwandte Informationen