2017-10-27 1 views
-2

awk를 사용하여 일치하는 문자열을 찾기 위해 큰 텍스트를 검색하고 있습니다. 내 목표는 일치하는 문자열, 줄 번호 및 일치하는 줄을 인쇄하는 것입니다. 첫 번째 부분 (예 : 일치하는 문자열 인쇄)을 수행 할 수 없었습니다. 일치하는 문자열을 검색하여 일치하는 문자열을 검색하고 일치하는 문자열을 찾으려면

현재 내가 가진 :

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

이 라인 번호와 일치하는 라인 있지만 일치하는 문자열을 생성합니다.

도움을 주시면 감사하겠습니다.

+1

'/ 문자열 1/문자열 2/string3 /'이 아닌 올바른 정규식을 찾아 무엇을 얻을 수 있습니다. 'string1' 또는'string2' 또는'string3'에 대한 검색 테스트 중입니까? – anubhava

답변

2

귀하의 질문 밤은 분명하지만, 이것은 당신이 원하는있을 것 같은데 :

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

을 수행 할 수 있습니다 (내가 아는 한)

행 번호와 일치하는 문자열이나 전체 라인을 얻을 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'match ($ 0,/regexp | regexp | regexp /) {print substr ($ 0, RSTART, RLENGTH), NR, $ 0} 'file_to_search.txt'와 같이 사용해야합니다. 명시된 원하는 출력을 생성합니다. – user3439894

관련 문제