などというfolder_A
名前のfolder_B
複数のサブフォルダーで、繰り返し計算によって生成されたファイルセットで「使用された合計CPU時間」文字列を見つける必要があります。folder_C
だからfolder_A
私もそう
file_1_1
file_1_2
file_1_3
file_1_4
file_1_5
file_2_1
file_2_2
file_2_3
その横には、異なる名前を持つ別のファイルがあります。ありfolder_B
ます
file_1_1
file_1_2
file_1_3
file_1_4
file_1_5
file_2_1
file_2_2
file_2_3
file_2_4
file_2_5
file_3_1
など、したがって各サブフォルダには異なる数の反復ステップが含まれているため、追加される最後のファイルの数も異なります。私の考えに行く方法は、再帰grep
ソートを使用して最後のファイルをアルファベット順にソートすることです。私が試したコードは次のとおりです。
grep -r "Total CPU time used" */file_* | tail -1
ただし、これは最後のディレクトリにある最後のファイルの出力のみを提供しますfolder_Z
。スキップしfolder_A/file_2_3
ないように、すべてのサブディレクトリで文字列をどのようにgrepできますかfolder_B/file_3_1
?
ベストアンサー1
tail -1
呼び出し結果の最後の行を提供しますgrep
。これは、最後のディレクトリの最後のファイル一致で発生する可能性があります。
代わりにディレクトリを繰り返す必要があります。これは次のように使用されますbash
。
for dir in folder_*/; do
files=( "$dir"/file_* )
grep -F 'Total CPU time used' "${files[-1]}"
done
これによりディレクトリが繰り返されます。各ディレクトリについて、(事前の意味で)最後のファイルで検索したい文字列を探します.
正規表現ではなく固定文字列を探しているので、-F
withを使用しています。grep
出力からファイルのファイル名をさらに取得するには、onを最後の引数としてgrep
表示するか(複数のファイルオペランドを一致させるときにファイル名を含む)、サポートしている場合はwithを使用できます。/dev/null
grep
grep
grep
-H
grep