탭으로 구분 된 파일 행을 배열로 읽습니다.
파일을 한 줄씩 스크립트로 읽고 싶습니다. 파일의 각 줄은 탭으로 구분 된 여러 값입니다. 각 줄을 배열로 읽고 싶습니다.
일반적인 bash "한 줄씩 파일 읽기"예제;
while read line
do
echo $line;
done < "myfile"
하지만 저에게 myfile은 다음과 같습니다 (탭으로 구분 된 값).
value1 value2 value3
value4 value5 value6
루프를 반복 할 때마다 각 줄이 배열로 들어가서
while read line into myArray
do
echo myArray[0]
echo myArray[1]
echo myArray[2]
done < "myfile"
이것은 첫 번째 루프 반복에서 다음을 인쇄합니다.
value1
value2
value3
그런 다음 두 번째 반복에서 인쇄됩니다.
value4
value5
value6
이것이 가능한가? 내가 볼 수있는 유일한 방법은 값을 수동으로 나누는 작은 함수를 작성하는 것입니다.이를 위해 bash에 내장 된 지원이 있습니까?
당신은 매우 가깝습니다.
while IFS=$'\t' read -r -a myArray
do
echo "${myArray[0]}"
echo "${myArray[1]}"
echo "${myArray[2]}"
done < myfile
(는 -r
말한다 read
즉 \
(가), 입력 데이터에 특별한되지 -a myArray
단어로 입력 라인을 분할에 결과를 저장하기를 알려줍니다 myArray
, 그리고는 IFS=$'\t'
대신도의 일반 배쉬 기본으로, 분할 단어 만 탭을 사용하도록 지시 공백으로 단어를 분할 할 수도 있습니다.이 접근 방식은 하나 이상의 탭을 구분 기호로 취급 하므로 필드가 비어 있으면 이후 필드가 배열의 이전 위치로 "이동"됩니다. 괜찮습니까?)
모든 단어 (bash 의미)를 모든 while 루프 반복에서 배열을 완전히 변경하는 다른 배열 인덱스로 분할하려는 경우 @ruakh의 대답이 올바른 접근 방식입니다. 하지만 당신은 다른 변수에 읽을 때마다 단어를 분할 읽기 속성을 사용할 수 있습니다 column1
, column2
, column3
이 코드에서처럼
while IFS=$'\t' read -r column1 column2 column3 ; do
printf "%b\n" "column1<${column1}>"
printf "%b\n" "column2<${column2}>"
printf "%b\n" "column3<${column3}>"
done < "myfile"
의미있는 변수 이름을 사용하여 배열 인덱스 액세스를 피하고 코드 가독성을 향상시키는 유사한 결과를 얻으려면 (물론을 사용 columnN
하는 것은 좋은 생각이 아닙니다).
시도해 볼 수도 있습니다.
OIFS=$IFS;
IFS="\t";
animals=`cat animals.txt`
animalArray=$animals;
for animal in $animalArray
do
echo $animal
done
IFS=$OIFS;
참고 URL : https://stackoverflow.com/questions/9736202/read-tab-separated-file-line-into-array
'development' 카테고리의 다른 글
Dart에서 런타임 유형 검사를 수행하는 방법은 무엇입니까? (0) | 2020.12.07 |
---|---|
그놈 쉘 확장을 테스트 / 디버그하는 방법은 무엇입니까? (0) | 2020.12.07 |
IList 변수에 항목 범위를 추가하는 방법 (0) | 2020.12.07 |
nodejs 요청 기본 제한 시간을 수정하는 방법은 무엇입니까? (0) | 2020.12.07 |
Pandas 데이터 프레임 열의 일부 값을 다른 값으로 바꾸기 (0) | 2020.12.07 |