여러 개의 CSV 파일을 서로 다른 스키마로 병합

여러 개의 CSV 파일을 서로 다른 스키마로 병합

STRUCTURED_PROD, STRUCTURED_NON_PROD 및 UNSTRUCTURED의 3가지 패턴을 가진 많은 csv 파일이 있는 디렉토리가 있습니다. 나는 이 모든 것을 헤더가 하나만 있는 3개의 개별 파일로 결합하고 싶습니다. 일반 cat 메소드도 헤더를 복사하므로 다음을 시도했습니다.

구조화되지 않은 상단에는 추가 그런지 라인이 있습니다. 아래는 제 스크립트인데 6개 파일만으로 실행하려면 시간이 오래 걸립니다.

File_Path=/Source/temp/
for Files in $File_Path/*.csv; do

if [[ "$Files" = *STRUCTURED_PROD* ]]; then
#cat *STRUCTURED_PROD.csv > Merged_STRUCTURED_PROD.csv
awk '(NR == 1) || (FNR > 1)' *STRUCTURED_PROD.csv > Merged_STRUCTURED_PROD.csv
fi

if [[ "$Files" = *STRUCTURED_NON_PROD* ]]; then

awk '(NR == 1) || (FNR > 1)' *STRUCTURED_NON_PROD.csv > Merged_STRUCTURED_NON_PROD.csv
fi

if [[ "$Files" = *_UNSTRUCTURED* ]]; then
awk 'FNR>2 || NR==2' *_UNSTRUCTURED.csv > Merged_UNSTRUCTURED.csv
fi

done

이전에 awk 대신 이것을 시도했지만 헤더가 두 번 복사되었습니다.

cat *STRUCTURED_PROD.csv > Merged_STRUCTURED_PROD.csv

답변1

for 루프를 통해 병합 명령을 여러 번 호출합니다.

하지만 한 번만 호출하면 됩니다. for 루프를 버리고 그냥 수행하십시오.

File_Path=/Source/temp/

awk '(NR == 1) || (FNR > 1)' ${File_Path}*STRUCTURED_PROD.csv > Merged_STRUCTURED_PROD.csv
awk '(NR == 1) || (FNR > 1)' ${File_Path}*STRUCTURED_NON_PROD.csv > Merged_STRUCTURED_NON_PROD.csv
awk 'FNR>2 || NR==2' ${File_Path}*_UNSTRUCTURED.csv > Merged_UNSTRUCTURED.csv

관련 정보