何百ものディレクトリがあり、各ディレクトリにはreport.ext
次の1行を含むことができる名前のファイルがあります。
Beta score for best model 95.35
ファイルが存在し、その行が含まれていて、その行に95を超える値を含むディレクトリのリストを取得したいと思います。
コマンドラインツールでこれを達成できますか?
答え1
最も簡単な方法は、これらのファイルを見つけて内容が一致した場合に親ディレクトリを印刷することです。たとえば、
find . -name report.ext -type f -exec awk '
/^Beta score for best model [0-9.]+$/ && $NF > 95 {
dir = FILENAME
sub("/[^/]*$", "", dir)
print dir
nextfile
}' {} +
awk
実装がこれをサポートしていない場合、これらの行がファイルにnextfile
現れるたびにディレクトリ名が印刷されます。