値を含み、複数のディレクトリに保存されたテキストファイルのセットがあります。複数のディレクトリの各ファイルにコマンドを適用できるように、ループを使用してコマンドを実行する必要があります。
私が思いついたコードは
#!/bin/bash
#
dir=`pwd`
datapath1=$dir/datafiles1
datapath2-$dir/datafiles2
for file in /$datapath1/*.txt ; do
sort -k1,1rn < "$file"
done > file.cat &&
#
for file in /$datapath2/*.txt ; do
sort -k1,1rn < "$file"
done > file.cat &&
#
明らかに、これは多くのディレクトリで非常に困難です。単一ループに対応するための単純化された方法はありますか?
答え1
スクリプトに問題があります。すべてのループがオーバーライドされますfile.cat
。
ループ内のすべてのファイルを繰り返すことで問題を取り除き、スクリプトを簡素化できます。
#!/bin/bash
dir=$(pwd)
datapath1=$dir/datafiles1
datapath2=$dir/datafiles2
for file in "$datapath1"/*.txt "$datapath2"/*.txt; do
sort -k1,1rn < "$file"
done > file.cat
また、常に変数を引用してください。
Kusalanandaが指摘したように、ディレクトリ名が非常に似ている場合は、globを使用して関連するすべてのディレクトリとファイルのアドレスを指定することもできます。与えられた例では、これは実際に可能です
sort -k1,1rn "$PWD"/datafiles[12]/*.txt > file.cat