grep의 for 루프가 레코드별로 레코드를 반환하지 않습니다.

grep의 for 루프가 레코드별로 레코드를 반환하지 않습니다.

내 쉘 스크립트에는 다음 for 루프가 있습니다.

#!bin/ksh
touch output.dat
IFS=">>>"
i=0
for stm in `grep "cpdctl dsjob run-pipeline --project " input_file`
do
echo "the current stmt is : $stm"
done

내 입력 파일에입력 파일패턴과 일치하는 레코드가 두 개 있습니다. 그래서 나는 출력이 다음과 같을 것으로 기대합니다

----Expected output
the current stmt is : "first line matching pattern"
the current stmt is : "second line matching pattern"

---Actual output
the current stmt is : "first line matching pattern"
"second line matching pattern"

the current stmt is :실제 출력에서 ​​누락됨

내가 무엇을 놓치고 있는지 알려주실 수 있나요? AWK도 시도했지만 출력은 동일합니다. 검색을 좀 해봤지만 비슷한 질문을 찾을 수 없었습니다.

[편집] 지금은 그럴 수도 있겠다고 생각했어요.IFS=">>>>"알겠습니다. 이 문제가 있을 수 있습니다. 따라서 내 전체 코드를 포함합니다. 나는 추가했다IFS=">>>>"내 레코드에 공백 문자가 포함되어 있기 때문에 for 루프는 공백 문자를 별도의 줄로 반환합니다.

답변1

사용 awk:

awk '/cpdctl dsjob run-pipeline --project / {print "the current stmt is :", $0}' input

그러면 다음을 포함하는 모든 줄이 인쇄됩니다.cpdctl dsjob run-pipeline --project

답변2

모두에게 폐를 끼쳐드려 죄송합니다. 아래 게시물은 이 문제를 해결하는 데 도움이 됩니다. 처음에 "\n"을 IFS로 지정했지만 작동하지 않았습니다. [이유는 아래 링크에서 설명합니다]. 귀하의 소중한 의견에 감사드립니다. [https://stackoverflow.com/questions/16831429/when-setting-ifs-to-split-on-newlines-why-is-it-necessary-to-include-a-backspac][1]

관련 정보