파일에서 Bash 배열로 줄 읽기
행이 포함된 파일을 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를 실행하고 있습니다.
명령어(철자)mapfile
)는 bash 4.0에서 도입되었습니다.
readarray -t a < /path/to/filename
Binary Zebra의 코멘트에 근거해, 여기서 테스트한 최신의 리비전.의 추가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
또, 어레이는 올바르게 설정되어 있습니다만, 판독이 잘못되어 있는 경우도 있습니다.양쪽의 큰따옴표를 사용해 주세요.""
및 브레이스{}
위의 예와 같이
편집:
글로벌 확장 가능성에 대한 코멘트, 특히 gniourf-gniourf의 코멘트에서 내 답변에 대한 많은 경고에 유의하십시오.
이러한 모든 경고를 염두에 두고 이 답변을 여기에 남깁니다(예, bash 4는 몇 년 전에 출시되었지만 일부 Mac은 4보다 이전 버전이 기본 셸로 설정되어 있습니다).
기타 주의사항:
또한 아래 Drizzt의 제안에 따라 포크 서브셸+cat을 다음으로 대체할 수 있습니다.
$(</etc/passwd)
다른 옵션은 IFS를 XIFS로 설정한 후 복원하는 것입니다.번거롭지 않은 Sorpigal의 답변도 참조하십시오.
파일의 각 행을 읽어들이는 가장 간단한 방법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
'source' 카테고리의 다른 글
Excel 피벗 테이블을 다른 피벗 테이블의 데이터 소스로 사용 (0) | 2023.04.19 |
---|---|
Xcode 5: 코드 서명 자격 오류 (0) | 2023.04.19 |
Objective-C의 NSMutableArray에서 중복된 값을 제거하는 가장 좋은 방법은 무엇입니까? (0) | 2023.04.19 |
아래 항목이 모두 목록에 있는지 확인하는 방법은 무엇입니까? (0) | 2023.04.19 |
C#: Excel Package를 사용한 행/열 수 가져오기 (0) | 2023.04.14 |