awk 명령의 결과를 매개변수로 전달합니다.

awk 명령의 결과를 매개변수로 전달합니다.

awk두 개의 서로 다른 열의 값을 얻은 적이 있다고 가정해 보겠습니다 .

출력은 다음과 같다고 가정합니다.

알파벳

정의

이제 이전 명령과 함께 파이프를 사용하기 위한 패턴으로 abc및를 사용 하고 싶습니다 . 이를 수행할 수 있는 방법이 있습니까?defgrep

자세한 지침은 다음을 참조하세요.

PDF 파일이 있고 다음을 사용하여 파일에서 키워드를 검색하고 있습니다.

pdftotext 'filename.pdf' - | grep 'pattern'

이제 일치하는 항목이 발견되면 결과의 첫 번째 열과 두 번째 열을 이전 명령이 포함된 파이프라인에서 grep에 대한 인수로 사용하려고 합니다. 처음 두 열을 사용할 수 있습니다

pdftotext 'filename.pdf' - | grep 'pattern' | awk '{ print $1, "\t"$2 }'

이제 파이프라인에서 grep 명령 이후에 이 두 값을 위 값에 다시(두 번째) 패턴으로 전달하려면 어떻게 해야 할까요?

답변1

다음과 같이 프로세스 대체를 통해 이를 수행할 수 있습니다.

grep -f <(awk '{print $1 "\n" $3}' filename) otherfile

이는 grep파일(플래그)에서 패턴을 읽습니다. 이 경우 실제로는 -f한 줄에 하나의 패턴을 인쇄하는 프로세스의 출력입니다. awk...filename그런 다음 이러한 패턴을 찾아보세요.otherfile

grep비록 덜 효율적일 수 있지만 실제로 파이프에서 이 작업을 수행하려면 표준 입력에서 해당 패턴을 읽어서 수행할 수 있습니다.

awk '{print $1 "\n" $3}' filename | grep -f - otherfile

편집: grep과 awk 사용에 대한 질문 편집 내용을 보면 다음을 수행하여 awk가 패턴 일치를 수행하도록 할 수 있습니다.

grep -Ff <(awk '/pattern/ {print $1 "\n" $3}' <(pdftotext 'filename.pdf' -)) otherfile

또는 파이프로:

pdftotext 'filename.pdf' - | awk '/pattern/ {print $1 "\n" $3}' | grep -Ff - otherfile

답변2

많은 쉘 지원명령 대체예를 들어

p=$(awk '{ print $1,$3 }' filename)

명령의 출력을 awk '{ print $1,$3 }' filename변수로 캡처합니다 p. 여기서는 cat중복되므로 awk에서 직접 수행할 수 있습니다 filename.

하지만 당신이 정말로 하고 싶은 일은 처리하는 일인 것 같아요.마디 없는출력 라인을 awk분석하고분리변하기 쉬운. 이 경우 다음을 수행할 수 있습니다.

awk '{print $1,$3}' filename | while read -r p1 p2; do grep -F "$p1" otherfile | grep -F "$p2"; done

otherfile필드 $1및 from 과 모두 $3일치하는 행을 찾습니다 filename.

답변3

이는 명령 대체를 사용하여 수행할 수 있습니다.

에서 인용여기:

명령 대체를 사용하면 명령 이름 자체를 명령의 출력으로 바꿀 수 있습니다. 명령 대체는 명령에 다음이 포함된 경우 발생합니다.

$(command)

또는 (백틱 버전):

`command`

답변4

xargs매개변수 전달 및 정의를 사용하는 방법을 배울 수 있습니다 .

cat filename|awk '{print $1,"\n"$3}'|xargs -I {} grep {} somefile

xargs -I {}grep이 사용할 수 있도록 매개변수를 "{}"로 바꾸세요.

관련 정보