파일에서 Bash 배열로 줄 읽기
- Bash 6 답변 의 텍스트 파일에서 배열 만들기
줄이 포함 된 파일을 Bash 배열로 읽으려고합니다.지금까지 다음을 시도했습니다.
시도 1
a=( $( cat /path/to/filename ) )
시도 2
index=0
while read line ; do
MYARRAY[$index]="$line"
index=$(($index+1))
done < /path/to/filename
두 시도 모두 파일의 첫 줄을 포함하는 하나의 요소 배열 만 반환합니다. 내가 무엇을 잘못하고 있지?
bash 4.1.5를 실행 중입니다.
최신 개정의 의견에 따라
과
. 추가
command eval
하면 표현식이 현재 실행 환경에서 유지되고 이전 표현식은 평가 기간 동안 만 유지됩니다.공백 \ 탭이없고 개행 / CR 만있는 $ IFS 사용
$ IFS=$'\r\n' GLOBIGNORE='*' command eval 'XYZ=($(cat /etc/passwd))'
$ echo "${XYZ[5]}"
sync:x:5:0:sync:/sbin:/bin/sync
또한 배열을 잘 설정했지만 잘못 읽었을 수도 있습니다- 위의 예
""
와
{}
같이 큰 따옴표 와 중괄호 를 모두 사용하십시오
편집하다:
가능한 glob 확장에 대한 의견, 특히 이전의 해결 시도에 대한
에서 내 답변에 대한 많은 경고에 유의하십시오.모든 경고를 염두에두고 나는 여전히이 대답을 여기에 남겨두고 있습니다 (예, bash 4는 몇 년 동안 나왔지만 2/3 세의 일부 Mac은 기본 쉘로 pre-4가 있음을 상기합니다)
기타 참고 사항 :
아래 drizzt의 제안을 따르고 분기 된 subshell + cat을
$(</etc/passwd)
때때로 사용하는 다른 옵션은 IFS를 XIFS로 설정 한 다음 복원합니다. 이것을 귀찮게 할 필요가없는
을 참조하십시오
은 철자
mapfile
4.0에서 도입되었습니다.
readarray a < /path/to/filename
파일의 각 줄을
bash
배열 로 읽는 가장 간단한 방법 은 다음과 같습니다.
IFS=$'\n' read -d '' -r -a lines < /etc/passwd
이제 배열
lines
을 색인하여 각 줄을 검색하십시오.
printf "line 1: %s\n" "${lines[0]}"
printf "line 5: %s\n" "${lines[4]}"
# all lines
echo "${lines[@]}"
파일에 공백이없는 문자열이 각 줄마다 1 문자열 인 경우 한 가지 방법 :
fileItemString=$(cat filename |tr "\n" " ")
fileItemArray=($fileItemString)
검사:전체 배열을 인쇄하십시오.
${fileItemArray[*]}
Length=${#fileItemArray[@]}
첫 번째 시도는 끝났습니다. 아이디어를 사용한 간단한 접근 방식은 다음과 같습니다.
file="somefileondisk"
lines=`cat $file`
for line in $lines; do
echo "$line"
done
#!/bin/bash
IFS=$'\n' read -d'' -r -a inlines < testinput
IFS=$'\n' read -d'' -r -a outlines < testoutput
counter=0
cat testinput | while read line;
do
echo "$((${inlines[$counter]}-${outlines[$counter]}))"
counter=$(($counter+1))
done
# OR Do like this
counter=0
readarray a < testinput
readarray b < testoutput
cat testinput | while read myline;
do
echo value is: $((${a[$counter]}-${b[$counter]}))
counter=$(($counter+1))
done
참고 URL :
https://stackoverflow.com/questions/11393817/read-lines-from-a-file-into-a-bash-array
'Programing' 카테고리의 다른 글
Windows 배치 스크립트에서 날짜 및 시간 형식 (0) | 2020.05.20 |
---|---|
.NET : 데이터와 함께 POST를 보내고 응답을 읽는 가장 간단한 방법 (0) | 2020.05.20 |
Laravel-Eloquent "Has", "With", "WhereHas"-무슨 뜻입니까? (0) | 2020.05.20 |
IPython 노트북 마크 다운에 이미지 삽입 (0) | 2020.05.20 |
jQuery 유효성 검사-숨겨진 필드에 대한 유효성 검사 사용 (0) | 2020.05.20 |