両方のファイルに次の内容があるとします。
$ 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
組み合わせはtail
1つのファイルに対しては機能しますが、複数のファイルでは機能しません。
$ 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