루프 내의 각 출력 라인은 어떻게 처리합니까?
다음과 같이 grep 명령어를 실행한 후 파일에서 취득한 행이 다수 있습니다.
var=`grep xyz abc.txt`
그 결과 xyz로 구성된 10개의 선이 있다고 합시다.
이제 grep 명령어 결과로 얻은 각 행을 처리해야 합니다.어떻게 진행하면 좋을까요?
간단한 방법 중 하나는 출력을 변수에 저장하지 않고 while/read 루프를 사용하여 직접 반복하는 것입니다.
예를 들어 다음과 같습니다.
grep xyz abc.txt | while read -r line ; do
echo "Processing $line"
# your code goes here
done
당신이 정확히 무엇을 원하는지에 따라 이 계획은 다양합니다.
루프 내부에서 변수를 변경해야 할 경우(그리고 루프 외부에서 변경 내용을 볼 수 있도록 해야 할 경우) Fedorqui의 답변에 따라 프로세스 대체를 사용할 수 있습니다.
while read -r line ; do
echo "Processing $line"
# your code goes here
done < <(grep xyz abc.txt)
다음을 수행할 수 있습니다.while read
이 루프는 이 루프의 결과로 공급됩니다.grep
명령어를 실행합니다.
while IFS= read -r result
do
#whatever with value $result
done < <(grep "xyz" abc.txt)
이 방법에서는 결과를 변수에 저장할 필요가 없으며 루프에 직접 출력을 "주입"할 필요가 없습니다.
의 사용법에 주의해 주세요.IFS=
그리고.read -r
바쉬의 권고에 따라FAQ/001: 파일(데이터 스트림, 변수)을 라인별로(및 필드별로) 읽는 방법:
읽기 -r 옵션은 백슬래시 해석을 방지합니다(일반적으로 백슬래시 줄바꿈 쌍으로 사용되며, 여러 줄에 걸쳐 계속되거나 구분 기호를 이스케이프하기 위해 사용됩니다).이 옵션이 없으면 입력에서 이스케이프되지 않은 백슬래시는 모두 폐기됩니다.읽기에는 거의 항상 -r 옵션을 사용해야 합니다.
위의 시나리오에서 IFS=는 선행 및 후행 공백을 트리밍하지 못하도록 합니다.이 효과를 원한다면 제거하세요.
프로세스 대체에 대해서는 bash hackers 페이지에서 설명합니다.
프로세스 대체는 프로세스의 입력 또는 출력(일부 명령어 시퀀스)이 임시 파일로 표시되는 리다이렉션의 한 형태입니다.
원라이너를 찾고 있는 고객:
grep xyz abc.txt | while read -r line; do echo "Processing $line"; done
여기서 grep + 다른 것을 사용하는 대신 awk를 사용하는 것이 좋습니다.
awk '$0~/xyz/{ //your code goes here}' abc.txt
--line-buffered grep 옵션을 사용하여 반복하지 않으면 다음과 같이 됩니다.
your_command | grep --line-buffered "your search"
Symfony PHP Framework router debug 명령 출력을 사용하여 모든 "api" 관련 경로를 grep:
php bin/console d:r | grep --line-buffered "api"
grep 결과에 대해 while/read 루프를 반복한다.예를 들어 다음과 같습니다.
grep pattern filename.txt | while read -r line ; do
echo "Matched Line: $line"
# your code goes here
done
대부분의 경우 처리 순서는 중요하지 않습니다.GNU Parallel은 다음과 같은 상황에 대응합니다.
grep xyz abc.txt | parallel echo do stuff to {}
처리 방법이 다음과 같은 경우:
grep xyz abc.txt | myprogram_reading_from_stdin
★★★★★★★★★★★★★★★★★」myprogram
을 사용법
grep xyz abc.txt | parallel --pipe myprogram_reading_from_stdin
언급URL : https://stackoverflow.com/questions/16317961/how-to-process-each-output-line-in-a-loop
'programing' 카테고리의 다른 글
RadioButtons를 열거형으로 바인드하는 방법 (0) | 2023.04.19 |
---|---|
프로젝트에서 모든 .pyc 파일을 삭제하려면 어떻게 해야 합니까? (0) | 2023.04.19 |
%를 사용하여 {0}과(와) 같은 자리 표시자를 대체하려고 하면 "TypeError: 문자열 형식 지정 중 일부 인수가 변환되지 않음"이 표시되는 이유는 무엇입니까? (0) | 2023.04.19 |
Eclipse용 Bash 스크립트 플러그인? (0) | 2023.04.19 |
PowerShell에서 특정 변수가 글로벌 범위에 존재하는지 여부를 테스트하려면 어떻게 해야 합니까? (0) | 2023.04.19 |