첫 번째 열 값을 기반으로 하는 단일 읽기 필터 csv

첫 번째 열 값을 기반으로 하는 단일 읽기 필터 csv

크기가 약 1GB인 거대한 csv 파일이 있습니다. csv의 첫 번째 열에는 약 300개의 고유한 정수 값이 포함되어 있습니다. csv를 한 번 처리하고 일치하는 첫 번째 열 값을 기반으로 출력을 다른 파일에 저장하고 싶습니다.

awk출력을 열 1의 특정 값으로 저장하는 솔루션을 알고 있습니다 .

for i in $column1values; do
  awk -F, -v a=$i '$1 == a' input.csv > output-$i.csv
done

하지만 이 솔루션은 일치하는 열 1 값을 찾으려고 할 때마다 큰 csv 파일을 다시 읽습니다. 대용량 csv 파일을 고려하면 이는 비효율적입니다.

그렇다면 csv 파일을 한 번만 읽으면서 어떻게 이를 달성할 수 있습니까?

편집하다:
내 원본 CSV 파일에 데이터가 있다고 가정합니다.

1,r1c2,r1c3,r1c4
1,r2c2,r2c3,r2c4
2,r3c2,r3c3,r3c4
2,r4c2,r4c3,r4c4
3,r5c2,r5c3,r5c4
3,r6c2,r6c3,r6c4

예를 들어 첫 번째 열 값을 기준으로 출력을 필터링하고 싶습니다.

출력1.csv:

1,r1c2,r1c3,r1c4
1,r2c2,r2c3,r2c4

출력2.csv

2,r3c2,r3c3,r3c4
2,r4c2,r4c3,r4c4

출력-3.csv

3,r5c2,r5c3,r5c4
3,r6c2,r6c3,r6c4

더 중요한 것은 원본 큰 csv 파일을 한 번만 읽으면서 이와 같은 출력을 필터링하고 싶다는 것입니다. 어떻게 하나요?

답변1

그리고 awk:

awk -F, '{f="output-"$1".csv"; print $0 >> f; close(f)}' file
  • -F,구분 기호를 로 설정합니다 ,.
  • f="output-"$1".csv"쓸 파일 이름을 설정하세요
  • print $0 >> f해당 행을 파일에 추가하십시오 f.
  • close(f)열려 있는 파일이 너무 많을 수 있으므로 파일을 닫으세요(댓글을 남겨주신 @에게 감사드립니다)코스타스)

관련 정보