7

egrepには、次のコマンドを使用して2つの式を結合する非常に便利な方法があることを知っています。

egrep "pattern1.*pattern2"|egrep "pattern2.*pattern1" filename.txt|wc -l

ただし、式を追加すると順列が指数関数的に増加するため、3つの式を検索するときにegrepのAND演算子を使用する簡単な方法があります。

私はそれを使用して別の方法を知っていsort|uniq -d ますが、私はより簡単な解決策を探しています。

編集:

私の現在の検索方法では、合計5つの結果が得られます。

#!/bin/bash
pid=$$
grep -i "angio" rtrans.txt|sort|uniq|egrep -o "^[0-9]+ [0-9]+ " > /tmp/$pid.1.tmp
grep -i "cardio" rtrans.txt|sort|uniq|egrep -o "^[0-9]+ [0-9]+ " > /tmp/$pid.2.tmp
grep -i "pulmonary" rtrans.txt|sort|uniq|egrep -o "^[0-9]+ [0-9]+ " > /tmp/$pid.3.tmp
cat /tmp/$pid.1.tmp /tmp/$pid.2.tmp|sort|uniq -d > /tmp/$pid.4.tmp
cat /tmp/$pid.4.tmp /tmp/$pid.3.tmp|sort|uniq -d > /tmp/$pid.5.tmp
egrep -o "^[0-9]+ [0-9]+ " /tmp/$pid.5.tmp|getDoc.mps > /tmp/$pid.6.tmp
head -10 /tmp/$pid.6.tmp

mumps@debianMumpsISR:~/Medline2012$ AngioAndCardioAndPulmonary.script 
1514 Structural composition of central pulmonary arteries. Growth potential after surgical shunts.
1517 Patterns of pulmonary arterial anatomy and blood supply in complex congenital heart disease
with pulmonary atresia
3034 Controlled reperfusion following regional ischemia.
3481 Anaesthetic management for oophorectomy in pulmonary lymphangiomyomatosis.
3547 A comparison of methods for limiting myocardial infarct expansion during acute reperfusion--
primary role of unload

その間:

mumps@debianMumpsISR:~/Medline2012$ grep "angio" rtrans.txt|grep "cardio" rtrans.txt|grep "pulmonary" rtrans.txt|wc -l
185

3つの検索すべてではなく、肺での検索の値のみを取得しているため、185行のテキストが生成されます。

4

3 に答える 3

9

どうですか

grep "pattern1" file|grep "pattern2"|grep "pattern3" 

これにより、p1、p2、およびp3を含む行が得られます。しかし、任意の順序で。

于 2013-03-02T17:28:36.420 に答える
1

ケントのアプローチ

grep "pattern1" file|grep "pattern2"|grep "pattern3" 

egrepは正しく、より高速である必要があります。記録のために、ピッピングせずに同じことを行うために使用する代替案を投稿したかったのです。

egrep "pattern1.*pattern2|pattern2.*pattern1"

p1 followed by p2またはを探しますp2 followed by p1

于 2017-03-16T12:37:07.247 に答える
0

元の質問は、彼のegrepコマンドが機能しなかった理由についてです。

egrep "pattern1.*pattern2"|egrep "pattern2.*pattern1" filename.txt|wc -l

KentとStanislavは、filename.txtを前に置いて、構文エラーを指摘するのが正しいです。しかし、これは元の問題に対処していません。

ボブの「現在の方法」(4年前)は、さまざまな行でさまざまなキーワードをgrepするためのマルチコマンドアプローチでした。言い換えれば、彼のスクリプトは、彼の検索語のいずれかを含む一連の行を探していました。他の提案された解決策は、彼のすべての検索用語を含む行をもたらすだけであり、それは彼の意図ではないようです。

代わりに、彼は1行のegrepを使用して、次のような用語を探すことができます

egrep -e 'pattern1|pattern2' filename.txt
于 2017-07-28T19:05:35.217 に答える