いくつかのディレクトリに異なる種類のファイル(拡張子が異なる)がある状況があります。特定のディレクトリにどのような種類のファイルが存在するかはわかりません。のは、次のような場合を想定してみましょう:拡張子に応じてファイルを解析する方法
/dir1/dir2/dir3/1/
/dir1/dir2/dir3/2/
/dir1/dir2/dir3/3/
/dir1/dir2/dir3/4/
/dir1/dir2/dir3/5/
要するに
、1、2、3、4、5、次のとおりです。
5つのすべてのディレクトリ1、2、3、4、5への共通パスが通りがありますdir3で。
例として、
ディレクトリ1と3は、
.txtのディレクトリ2、4、5は、私は今のようにこれをやっている拡張子.gzを
を持つファイルを持っている拡張子を持つファイルを持っています:
while [ $a -le 5 ]
do
cat /dir1/dir2/dir3/"$a"/*.txt | grep "string" > /path/output"$a"
zcat -f /dir1/dir2/dir3/"$a"/*.gz | grep "string" > /path/output"$a"
((a++))
done
出力は作成されますが、空白はほとんどありません。入力には私がgrepで使用した文字列が含まれていると確信しています。私は使用しているスクリプトがファイルを上書きしていると思います。
ファイル拡張子を最初に検索し、それに応じてcatまたはzcatを実行すると、これを実行するにはどうすればよいですか?提案してください?
編集:
私も次のことを試してみた:
while [ $a -le 5 ]
do
for f in /dir1/dir2/dir3/"$a"/*.txt
do
cat $f | grep "string" > /path/output"$a"
done
for f in /dir1/dir2/dir3/"$a"/*.gz
do
cat $f | grep "string" > /path/output"$a"
done
done
編集した試行は、 'shopt -s nullglob'を使用する限り有効です。これは、一方または他方の 'for'ループがまったく入力されないようにします。どんな理由であれ、同じディレクトリにある 'gz'と' txt'ファイルで終わると、 'gz'ループの結果は' txt'ループの結果を上書きします。 – chepner
@chepnerはい。出力を別のディレクトリにリダイレクトするとうまくいきます.1つは.txt、もう1つは.gzです。 – intruder