awk를 사용하여 출력 라인의 라인 번호를 인쇄하십시오.

awk를 사용하여 출력 라인의 라인 번호를 인쇄하십시오.

문맥:파일의 다른 줄에서 여러 문자열을 찾으려면 grep을 사용합니까(즉, 줄 기반 검색이 아닌 전체 파일)?

egrep -nH 'Dansk|Norsk|Svenska' file3

또는 사용립그렙

rg  'Dansk|Norsk|Svenska' file3

하지만 답은 있다

awk '/Dansk/{a=1}/Norsk/{b=1}/Svenska/{c=1}END{ if (a && b && c) print $0 }'  file3

난 이해가 안 돼요이것답변.

알겠어요 awk '/Dansk/{a=1}/Norsk/{b=1}/Svenska/{c=1}.

내 생각에 지금 문제는 awk를 사용하고, 패턴 일치 시 출력 라인을 사용하여 라인 번호를 인쇄하는 것입니다.

업데이트: 나도 알겠어이것답변. 업데이트:
거의 종료됨:

awk '/Dansk/{a=1}/Norsk/{b=1}/Svenska/{c=1}{ if (a || b || c ) print $0; next}1'  file3

그것은 돌아온다

Subtitle: 04, Language: da - Dansk, Content: Undefined, Stream id: 0x23,
        Subtitle: 05, Language: de - Deutsch, Content: Undefined, Stream id: 0x24,

기대수익률은

   Subtitle: 04, Language: da - Dansk, Content: Undefined, Stream id: 0x23,

file3콘텐츠:

Disc Title: unknown
Title: 01, Length: 01:33:37.000 Chapters: 33, Cells: 31, Audio streams: 04, Subpictures: 20
        Subtitle: 01, Language: ar - Arabic, Content: Undefined, Stream id: 0x20, 
        Subtitle: 02, Language: bg - Bulgarian, Content: Undefined, Stream id: 0x21, 
        Subtitle: 03, Language: cs - Czech, Content: Undefined, Stream id: 0x22, 
        Subtitle: 04, Language: da - Dansk, Content: Undefined, Stream id: 0x23, 
        Subtitle: 05, Language: de - Deutsch, Content: Undefined, Stream id: 0x24, 
(...)

고쳐 쓰다. 거의 가깝습니다.
awk '/Dansk/{a=1}/Norsk/{b=1}/Svenska/{c=1}{ if (a || b || c ) print NR, $0}' file3 하지만 그것은 돌아온다

6         Subtitle: 04, Language: da - Dansk, Content: Undefined, Stream id: 0x23,
7         Subtitle: 05, Language: de - Deutsch, Content: Undefined, Stream id: 0x24,
8 (...)

답변1

awk는 한 쌍의 조건과 작업으로 구성됩니다. 조건 부분은 산술 표현식이나 패턴 일치 또는 하나 이상의 표현식의 결과일 수 있으며 모두 true 또는 false 문일 수 있습니다.

여기서 주어진 샘플은 한 쌍의 패턴 일치 및 작업을 사용합니다. 즉,

awk '/if-this-regex-exist-in-current-line/ { "yes, so do something" }' infile

3개 모두 동일한 패턴 일치를 수행하고 이러한 정규식이 한 줄에 있으면 임시 변수 플래그를 설정합니다.

그런 다음 입력 infile 파일의 모든 레코드/라인을 처리한 후 한 번만 실행되는 END{} 블록에서 모든 플래그가 설정되었는지 확인합니다(3개 패턴이 모두 발견되었거나 단일 패턴 패턴에서 발견되었음을 의미). ) 라인 또는 while 입력 파일에서) 그런 다음 인쇄합니다.마지막 줄(FILENAME 등을 인쇄하고 싶을 수도 있습니다) 입력 파일.


두 번째 추가 질문에 답하려면:

awk '/Dansk/{a=1}/Norsk/{b=1}/Svenska/{c=1}{ if (a || b || c ) print $0; next}1' file3

이는 Dansk또는 Norsk중 하나 이상을 포함하는 행을 인쇄하고, 그렇지 않으면 명령이 수행하는 모든 작업을 또는 Svenska에 쓸 수 있는 행을 인쇄합니다 .awk 1 infilecat infile

In은 x ||y ||z || ..."x OR y OR z OR ... 중 적어도 하나가 True인 경우"를 의미하고, in은 x && y && z &&..."x AND y AND z AND ... 모두가 True인 경우"를 의미하며 "true"를 의미합니다. true로 평가되는 표현식이나 조건의 결과입니다.

관련 정보