forループの代わりにawkを使用して複数行の文字列操作を実行する

forループの代わりにawkを使用して複数行の文字列操作を実行する

ファイルパスを含む複数行のテキスト ファイル ( file1) を想定します。

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

file2ファイル名のみを保存し、各ファイル名の先頭に特殊文字 (例: ) を追加したいと思います[#

単純な for ループを使用してこれを実行できることはわかっていますが、これは好ましくない方法であると考えられていることを理解しています。

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

このタスクは を使用するとよりきれいに実行できると思いますawkが、以下のコードはほんの一部です。 上記のタスクを で実行するにはどうすればよいですかawk?

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

答え1

/フィールド区切り文字として使用し、最後のフィールドを出力します。

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

答え2

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

結果

[#foo
[#bar
[#baz

関連情報