ksh에서 파일 내용을 읽고 ','로 분할합니다.

ksh에서 파일 내용을 읽고 ','로 분할합니다.

내 file.txt에는 다음 내용이 포함되어 있습니다.

./raw_input/0009/img.raw,./raw_input/0009/calib.raw

답변1

만약 당신의kshksh93또는 다음을 mksh사용하여 첫 번째 줄을 배열로 읽을 수 있습니다.

IFS=, read -rA array < file.txt

zsh또는 에도 적용됩니다 yash. 어떤 이유에서인지 bash몇 년 후 이 -a대신 사용하기로 결정했습니다 -A.

-Sksh93은 CSV 구문 분석 (여러 줄에 걸쳐 따옴표 및 값 처리) 도 수행할 수 있습니다 .

IFS=, read -rSA array < file.txt

예를 들어 다음을 포함합니다 file.txt.

"foo  bar",,"blah""blah
blah"

이는 다음을 제공합니다:

$ typeset -p array
typeset -a array=('foo  bar' '' $'blah"blah\nblah')

나뉘다전체 파일쉼표에서는 분할+glob(따옴표가 없는 경우 암시적으로 수행됨 $(<file))을 사용하고 glob을 비활성화할 수 있습니다.

set -o noglob
IFS=,
array=( $(<file.txt) )

또는 ksh88/pdksh와의 호환성을 위해:

set -o noglob
IFS=,
set -A array -- $(<file.txt)

후행 $(<...)개행 문자도 제거됩니다.

또한 파일이 a로 끝나는 경우 ( 위의 경우 ,에도 적용됨 , , Except 포함 ) 추가로 후행 빈 요소가 생성되지 않습니다( 이는 다음과 같이 처리됩니다).read-Szsh,구분 기호, 아니요분할기, 제안된 S내용에도 불구하고 $IFS).

관련 정보