![awk: 문자열을 bash 배열로 직접 추출하는 방법은 무엇입니까?](https://linux55.com/image/188400/awk%3A%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20bash%20%EB%B0%B0%EC%97%B4%EB%A1%9C%20%EC%A7%81%EC%A0%91%20%EC%B6%94%EC%B6%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
내가 이것을 가지고 있다고 가정 해 봅시다 :
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
).