次のコマンドの実行中に10個のフォルダを繰り返したいと思います。
awk 'FNR > 1' *.csv | sort -sk 1,2 | sort -sk 3,3 > ${f}_appended.dat
次のようにforループラッパーを使用してください。
for f in */ ; do awk 'FNR > 1' *.csv | sort -sk 1,2 | sort -sk 3,3 > ${f}_appended.dat; done
各フォルダにのみ書き込みを行い、_appended.dat
ループを通過するフォルダ内のファイルに対してコマンドを実行せずに、ルートフォルダ(存在する場合)にコマンドを実行します。
望ましい結果:
awkコマンドを使用して作成されたすべてのフォルダには_appished.datファイルがあります。したがって、10個のフォルダがあり、各フォルダには.csvファイルの内容に基づいて生成された一意のファイルがあります。
ベストアンサー1
これにより、各サブディレクトリのawk
ファイルに対してコマンドが実行され、そのディレクトリに出力を含む*.csv
ファイルが残ります。{dirname}_appended.dat
for f in */
do
awk 'FNR > 1' "$f"/*.csv | sort -sk 1,2 | sort -sk 3,3 >"${f}${f%/}_appended.dat"
done
議論する
考慮する:
for f in */ ; do awk 'FNR > 1' *.csv | sort -sk 1,2 | sort -sk 3,3 > ${f}_appended.dat; done
ループが実行されるたびに、*.csv
現在のディレクトリのファイルが処理されます。ディレクトリ内のファイルをインポートするには、代わりにを$f
使用します。"$f"/*.csv
*.csv
また、上記は各実行結果をファイルに保存します。${f}_appended.dat
選ぶ
別の方法は、cd
各ディレクトリに移動してawk
次のコマンドを実行することです。
for f in */
do
( cd "$f"; awk 'FNR > 1' *.csv | sort -sk 1,2 | sort -sk 3,3 >"${f%/}_appended.dat" )
done
コマンドcd
はサブシェル内で実行されます(括弧で区切られます)。したがって、サブシェルが終了すると、現在のディレクトリは元の値に復元されます。