2017-10-27 13 views
-2

awkを使用して一致する文字列を検索します。私の目標は、一致する文字列、行番号、および一致する行を印刷することです。私は最初の部分(つまり、一致する文字列を印刷する)を達成することができませんでした。一致する文字列を検索して行を印刷し、一致する文字列を検索する

現在、私は持っている:

awk '/string1/string2/string3/{ print NR, $0 }' file_to_search.txt 

これは、行番号と一致する行ではなく、一致する文字列を生成します。

何か助けていただければ幸いです。

+1

'/文字列1/string2の/はstring3 /'ではない有効な正規表現を探しものを手に入れることができます。あなたは 'string1'または' string2'または 'string3'のテストを探していますか? – anubhava

答えて

2

ご質問イマイチは明らかしかし、これはあなたが望むかもしれないように聞こえる:

awk 'match($0,/regexp/){ print substr($0,RSTART,RLENGTH), NR, $0 }' file_to_search.txt 
0

のgrepを使用すると、行番号と一致する文字列または完全なラインを得ることができます(私が知っているように)

AWKで
grep -wnoF "string1 
string2 
string3" infile 

、あなたは

awk ' 
function findmatch(s, i) { 
for (i=1;i<=NF;i++) 
    {if ($i == s) 
    {print "find string = "s,"on line number = "FNR,"Complete line = "$0}}; 
} 
s1{findmatch(s1)} 
s2{findmatch(s2)} 
s3{findmatch(s3)} 
' s1='string1' s2='string2' s3='string3' infile 
+0

あなたの 'grep' _command_は、書かれているように、**一致する文字列**、**行番号**、**一致行**、**行番号**、**一致する文字列**は正しい順序でもありません。 – user3439894

+0

はい、私の答えを読んだら、私はそれを伝えます。 –

+0

あなたは明らかにその点を見逃しているので、決して要求された出力を提供しないソリューションを投稿するのです!答えの 'grep'部分はそこにあるべきではありません。また、IMOあなたの 'awk'コマンドは不必要に冗長で複雑なので、表現された結果を得る必要があります。もう一つの答えはより単純であり、求められたことを正確に生み出すことができます。 OPにマッチさせるには、awkマッチ($ 0、/ regexp | regexp | regexp /){print substr($ 0、RSTART、RLENGTH)、NR、$ 0} 'file_to_search.txt'として使用する必要がありますが、指定された所望の出力を生成する。 – user3439894

関連する問題