MS EXCEL CSV 파일 끝의 빈 줄을 제거합니다.

MS EXCEL CSV 파일 끝의 빈 줄을 제거합니다.

한 경로에 약 300개의 CSV 파일이 있습니다. 이러한 파일 이름에는 *_PROD.csv, *_DEV.csv및 3가지 카테고리가 있습니다 *_UAT.csv.

이러한 파일에는 많은 빈 줄(약 1000개)이 있으며 프로세스가 파일을 경로에 복사할 때 레코드 끝에 삽입됩니다.

이 모든 파일에서 빈 줄을 제거하고 싶습니다. 공백을 제거한 후 이 파일을 병합해야 합니다.

나는 이것을 시도했습니다 :

sed -i '/^$/d' ${File_Path}*_PROD.csv
sed -i '/^$/d' ${File_Path}*_DEV.csv
sed -i '/^$/d' ${File_Path}*_UAT.csv

그러나 이는 예상대로 작동하지 않았습니다.

끝에서 빈 줄을 제거한 후에는 다른 작업을 수행해야 하기 때문에 파일을 변경하지 않고 유지하고 싶습니다.

제안해주세요.

참고용 내 스크립트:

File_Path=/File_Path

dos2unix ${File_Path}*_PROD.csv
dos2unix ${File_Path}*_DEV.csv
dos2unix ${File_Path}*_UAT.csv



sed -i '/^\s*$/d' ${File_Path}*_PROD.csv
sed -i '/^\s*$/d' ${File_Path}*_DEV.csv
sed -i '/^\s*$/d' ${File_Path}*_UAT.csv

awk '(NR == 1) || (FNR > 1)' ${File_Path}*PROD.csv > Merged_PROD.csv
awk '(NR == 1) || (FNR > 1)' ${File_Path}*_DEV.csv > Merged_DEV.csv
awk '(NR == 1) || (FNR > 1)'  ${File_Path}*_UAT.csv > Merged_UAT.csv

답변1

CSV 파일에는 Windows 줄 끝이 있습니다. 따라서 먼저 Linux 형식으로 변환해야 합니다.

dos2unix yourfile당신을 위해 그것을 할 것입니다.

상자에 없으면 다음 dos2unix과 같이 동일한 결과를 얻을 수 있습니다.

sed "s/\r//" infile >outfile         # UnxUtils sed v4.0.7 or higher
tr -d \r <infile >outfile            # GNU tr version 1.22 or higher

~에 따르면sed1line.txt.

파일이 Unix 형식으로 변환되면 일반적인 sed명령이 예상대로 작동합니다.

빈 줄의 공백을 확인하세요.sed '/^\s*$/d' yourfile

하나의 sed 명령으로 모두 :

sed -e 's/\r// -e /^\s*$/d' yourfile > outputfile

답변2

"빈" 줄에는 공백 문자가 포함될 가능성이 높습니다(캐리지 리턴은 DOS 또는 Windows 프로그램으로 작성된 파일에서 주의해야 할 의심스러운 사항입니다). 다음 사항을 고려하도록 모델을 변경할 수 있습니다.

sed -i -e '/^[[:space:]]*$/d' \
    "${File_Path}"*_{PROD,DEV,UAT}.csv

(변수 확장도 인용하도록 주의하세요!)

답변3

먼저 병합한 다음 빈 줄을 삭제하면 약간 더 효율적입니다. 다음을 수행할 수 있습니다.

cat *_PROD.csv > MERGED_PROD.csv
dos2unix MERGED_PROD.csv
perl -i.bak -ne 'print if /\S/' MERGED_PROD.csv

마지막 Perl 줄은 원본 MERGED_PROD.csv의 복사본을 MERGED_PROD.csv.bak.-i.bak-i

관련 정보