
ファイルパスを含む複数行のテキスト ファイル ( 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