![csv 파일을 반복하고 열의 모든 고유 요소를 배열에 저장합니다.](https://linux55.com/image/95748/csv%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EB%B0%98%EB%B3%B5%ED%95%98%EA%B3%A0%20%EC%97%B4%EC%9D%98%20%EB%AA%A8%EB%93%A0%20%EA%B3%A0%EC%9C%A0%20%EC%9A%94%EC%86%8C%EB%A5%BC%20%EB%B0%B0%EC%97%B4%EC%97%90%20%EC%A0%80%EC%9E%A5%ED%95%A9%EB%8B%88%EB%8B%A4..png)
매우 큰 csv 파일을 구문 분석하고 첫 번째 열의 값을 기반으로 해당 내용을 포함하는 많은 하위 파일을 만들고 있습니다. 지금까지 내가 한 일은 배열을 수동으로 선언하는 것이었습니다.
declare -a arr=(
"Value 1"
"Value 2"
)
그런 다음 이 배열을 반복하고 내가 관심 있는 정보로 미니 csv 파일을 생성하는 동시에 출력 csv 파일의 이름을 밑줄로 공백을 바꾸도록 변경합니다.
for i in "${arr[@]}"
do
NAME=${i// /_}
echo $header > "$outputpath/$NAME.csv"
grep "^$i," "$fixed_file" | cut -d ',' -f 4,6 >> "$outputpath/$NAME.csv"
done
첫 번째 단계를 자동화하는 방법이 있나요? 즉, 원본 csv 파일을 반복하여 arr에 열 1의 모든 고유 값을 채울 수 있나요?
답변1
일방 통행:
declare -A arr
while IFS=, read -r one rest
do
arr[$one]=1
done < input.csv
그런 다음 키를 순환합니다.
for i in "${!arr[@]}"
do
#...
done