サブディレクトリの最後のアルファベットファイルのgrep文字列

サブディレクトリの最後のアルファベットファイルのgrep文字列

などという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

これによりディレクトリが繰り返されます。各ディレクトリについて、(事前の意味で)最後のファイルで検索したい文字列を探します.

正規表現ではなく固定文字列を探しているので、-Fwithを使用しています。grep

出力からファイルのファイル名をさらに取得するには、onを最後の引数としてgrep表示するか(複数のファイルオペランドを一致させるときにファイル名を含む)、サポートしている場合はwithを使用できます。/dev/nullgrepgrepgrep-Hgrep

おすすめ記事