요소 배열과 입력 파일이 주어지면 배열을 반복하여 각 요소를 입력 파일과 일치시키고 싶습니다. 그런 다음 이 요소가 발생하는 입력 파일의 행과 그 바로 다음에 오는 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