Bash의 텍스트 파일에서 배열 만들기
펼쳐지는 URL을 가져 오기 필수 필드에 구문 분석하고 출력을 리디렉션하여 file.txt 파일에 저장합니다 . 출력은 필드가 발견 될 때마다 새 줄에 저장됩니다.
file.txt
A Cat
A Dog
A Mouse
etc...
file.txt
모든 줄이 배열의 자체 배열 변수가되는 새 펼쳐져 배열 을 가져오고 생성 합니다 . 지금까지 시도했습니다.
#!/bin/bash
filename=file.txt
declare -a myArray
myArray=(`cat "$filename"`)
for (( i = 0 ; i < 9 ; i++))
do
echo "Element [$i]: ${myArray[$i]}"
done
이 펼쳐를 실행하면 공백으로 인해 단어가 분할되고
원하는 출력
Element [0]: A Cat
Element [1]: A Dog
etc...
나는 얻는다.
실제 출력
Element [0]: A
Element [1]: Cat
Element [2]: A
Element [3]: Dog
etc...
각 줄의 전체 노드가 배열의 각 변수와 일대일 일치하는 아래의 루프를 어떻게 배열합니까?
다음 명령을 사용하십시오 .mapfile
mapfile -t myArray < file.txt
오류는 다음을 사용 하고 있습니다. 파일 줄for
을 반복하는 관용적 인 방법 은 다음과 같습니다.
while IFS= read -r line; do echo ">>$line<<"; done < file.txt
자세한 내용은 BashFAQ / 005 를 참조하십시오.
mapfile
및 readarray
(동의어있는) 배쉬 버전 4 이상에서 사용할 수 있습니다. 이전 버전의 Bash가있는 경우 루프를 사용하여 파일을 배열로 읽을 수 있습니다.
arr=()
while IFS= read -r line; do
arr+=("$line")
done < file
파일에 불완전한 (줄 바꿈 누락) 마지막 줄이있는 경우 다음 대안을 사용할 수 있습니다.
arr=()
while IFS= read -r line || [[ "$line" ]] do
arr+=("$line")
done < file
관련 :
이 작업도 수행 할 수 있습니다.
oldIFS="$IFS"
IFS=$'\n' arr=($(<file))
IFS="$oldIFS"
echo "${arr[1]}" # It will print `A Dog`.
노트 :
파일 이름 확장이 계속 발생합니다. 예를 들어, 리터럴 이 있는 줄이 있으면 현재 폴더의 모든 파일로 확장됩니다. 따라서 파일에 시나리오가없는 경우에만 사용하십시오.*
파일에서 각 줄을 배열에 할당하기 만하면됩니다.
#!/bin/bash
i=0
while read line
do
arr[$i]="$line"
i=$((i+1))
done < file.txt
맵 파일을 사용하거나 -a를 읽으십시오.
항상 shellcheck를 사용하여 코드를 확인하십시오 . 종종 정답을 줄 것입니다. 이 경우 SC2207 은 공백으로 구분되거나 줄 바꿈으로 구분 된 값이있는 파일을 배열로 읽는 것을 다룹니다.
이러지마
array=( $(mycommand) )
줄 바꿈으로 구분 된 값이있는 파일
mapfile -t array < <(mycommand)
공백으로 구분 된 값이있는 파일
IFS=" " read -r -a array <<< "$(mycommand)"
shellcheck 페이지는 이것이 모범 사례로 간주되는 이유를 제공합니다.
이 대답 은
mapfile -t myArray < file.txt
어떤 이유로 든 bash <4.x 에서 사용하려면 shim 을 만들었습니다 . bash> = 4.x 인 경우 기존 명령을 사용합니다.mapfile
mapfile
mapfile
현재는 옵션 -d
과 -t
작업 만 있습니다 . 그러나 위의 명령에는 충분합니다. macOS에서만 테스트했습니다. macOS Sierra 10.12.6에서 시스템 bash는 3.2.57(1)-release
. 따라서 심이 유용 할 수 있습니다. homebrew로 bash를 업데이트하고 직접 bash를 빌드 할 수도 있습니다.
이 기술 을 사용 하여 하나의 호출 스택에 변수를 설정합니다.
참고 URL : https://stackoverflow.com/questions/30988586/creating-an-array-from-a-text-file-in-bash
'ProgramingTip' 카테고리의 다른 글
std :: string을 파일에 쓰는 방법? (0) | 2020.11.08 |
---|---|
const 키와 non const 키의 차이점은 무엇입니까? (0) | 2020.11.08 |
콘솔에 인쇄 된 것을 잘리지 마십시오 (RStudio에서). (0) | 2020.11.08 |
C ++에서 부울에 비트 연산자 사용 (0) | 2020.11.08 |
Google 크롬 확장 프로그램에서 외부 애플리케이션을 시작 하시겠습니까? (0) | 2020.11.08 |