複数のファイルから最後の一致を取得するには、Grepとfindを使用してください。

複数のファイルから最後の一致を取得するには、Grepとfindを使用してください。

両方のファイルに次の内容があるとします。

$ cat ttest1.txt 
x = 1
x = 3
y = 5
$ cat ttest2.txt 
x = 4
x = 10
y = 3

xファイルを再帰的にgrepし、各ファイルの最後のインスタンスを印刷したいと思います。したがって、希望の出力は次のようになります。

ttest1.txt:x = 3
ttest2.txt:x = 10

次のgrep組み合わせはtail1つのファイルに対しては機能しますが、複数のファイルでは機能しません。

$ grep x ttest1.txt 
x = 1
x = 3
$ grep x ttest1.txt | tail -n 1
x = 3
$ grep -r x ttest* | tail -n 1
ttest2.txt:x = 10

この問題をどのように解決できますか?

ベストアンサー1

するとき

grep -r x ttest* 

あなたはストリームを得る

ttest1.txt:x = 1
ttest1.txt:x = 3
ttest2.txt:x = 4
ttest2.txt:x = 10

これは予想通りtail -1ですttest2.txt:x = 10

grep | tailただし、マージされたストリームではなく、個々のファイルごとに結合を実行したいと思います。したがって、個々のファイルごとにこれを実行してください。

for f in ttest* ; do
    grep x "$f" | tail -n 1
done

おすすめ記事