awk: 문자열을 bash 배열로 직접 추출하는 방법은 무엇입니까?

awk: 문자열을 bash 배열로 직접 추출하는 방법은 무엇입니까?

내가 이것을 가지고 있다고 가정 해 봅시다 :

ARRAY=()
NUM_EXTRACTED=$(cat somefile.txt | awk '/magic/{i++; print > i "_extracted.txt"} END {print i}')
for (( i=1; i<=$NUM_EXTRACTED; i++)); do
  LINE=$(cat "$i"_extracted.txt)
  ARRAY+=("$LINE")
done

이 스크립트는 "magic"이라는 단어가 포함된 somefile.txt의 모든 행을 가져와 ARRAY 배열에 넣습니다.

행을 임시 파일에 저장하지 않고 ARRAY를 직접 채울 수 있는 방법은 무엇입니까?

답변1

에서는 내장 함수와 함께 작동 bash합니다 .readarray

readarray -t myarray < <(grep magic somefile.txt)

보다 일반적으로 말하면, 셸에서 텍스트를 처리하기 위해 루프를 사용하는 경우 아마도 잘못 수행하고 있는 것입니다. 쉘 배열을 사용하여 작업한다는 것은 일반적으로 적절한 프로그래밍 언어도 필요함을 나타냅니다(또는 에서 모든 작업을 수행함 awk).

관련 정보