awk가 변수와 일치하는 행과 다음 n 행을 인쇄하고 awk에서 변수를 사용하도록 합니다.

awk가 변수와 일치하는 행과 다음 n 행을 인쇄하고 awk에서 변수를 사용하도록 합니다.

요소 배열과 입력 파일이 주어지면 배열을 반복하여 각 요소를 입력 파일과 일치시키고 싶습니다. 그런 다음 이 요소가 발생하는 입력 파일의 행과 그 바로 다음에 오는 3개의 행을 가져오고 싶습니다. 나는 이것을 시도한다:

for variable in $array
do
awk -v var="$variable" '/var/{x=NR+3}(NR<=x){print}' inputfile.txt
done

그러나 이것은 원하는 출력을 반환하지 않습니다. 그런 다음 grep을 시도했습니다.

for variable in $array
do
grep -A 3 "$variable" inputfile.txt
done

이것은 작동합니다. 문제는 해결됐다고 생각하지만, awk를 더 잘 이해하고 싶어서 awk에 변수를 제공하려 했을 때 제가 뭘 잘못하고 있었는지 궁금해서 이 질문을 올리게 되었습니다. 제가 가져온 awk 조각에 BEGIN 부분이 없어서 헷갈릴 수도 있을 것 같은데요? BEGIN 부분이 불필요하다고 가정할까요? awk를 사용하여 문제를 해결할 수 있나요? awk가 이 작업에 가장 적합한 도구인가요? 인터넷의 다른 곳에서 본 awk의 예제 및 튜토리얼과 일치하도록 awk 예제를 BEGIN 및 END 섹션으로 다시 작성할 수 있습니까? 감사해요

답변1

문제는 변수를 var정규식 패턴에 붙여 넣을 수 없다는 것입니다 /var/.
대신 전체 줄을 $0해당 변수와 일치시키세요(이 경우 정규식 패턴으로 처리됩니다).

awk -v var="$variable" '$0~var{x=NR+3}(NR<=x){print}' inputfile.txt

관련 정보