ディレクトリ内の各ファイルに対してawkを実行し、各ファイルの出力(同じファイル名を使用)を別のディレクトリに保存します。

ディレクトリ内の各ファイルに対してawkを実行し、各ファイルの出力(同じファイル名を使用)を別のディレクトリに保存します。

本質的に私が望むのは、ディレクトリ内のすべてのテキストファイルに対して非破壊的にawkを実行して結果を取得することです。同じファイル名を持っています別のディレクトリに

つまり、awkを使用してディレクトリ内のすべてのファイルに対して操作を実行し、結果は同じファイル名を持つファイルに対してawkを実行した結果を含むディレクトリです。

f1.txt、f2.txt、およびf3.txtファイルを含むfooディレクトリにあるとします。各ファイルでscript.awkを実行したいので、結果はbar / f1.txt、bar / f2.txt、bar / f3.txtにあります。

ベストアンサー1

あまりありません。ファイルを繰り返して、ファイル名の前に出力ディレクトリ名を付けます。

outputdir=bar
mkdir -p "$outputdir"
for f in ./*.txt; do
    awk -f script.awk < "$f" > "$outputdir/$f"
done

これは、入力ファイルが現在のディレクトリにあり、outputdirそのディレクトリに相対的であると仮定します。したがって、同じレベルにfoo/andがある場合は、andを設定する必要があります。bar/cd foooutputdir=../bar


それ以外の場合は、入力ディレクトリ名を削除する必要があります$f。プレフィックス削除拡張は${var#pattern}ここで機能します。

outputdir=./bar
inputdir=./foo
mkdir -p "$outputdir"
for f in "$inputdir"/*.txt; do
    awk -f script.awk < "$f" > "$outputdir/${f#"$inputdir"}"
done

"$outputdir/$(basename -- "$f")"あるいは、あなたによく知られている同様のものを使用することもできます。 (ディレクトリ名が悪い場合は引用符に注意してください。)

おすすめ記事