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