쉘 스크립트를 통해 CSV 파일에서 데이터는 없고 쉼표만 있는 마지막 행을 제거합니다.

쉘 스크립트를 통해 CSV 파일에서 데이터는 없고 쉼표만 있는 마지막 행을 제거합니다.

이상적으로는 1~2행의 데이터가 있어야 하는 CSV 파일을 생성 중인데 다음과 같습니다.

11,ABC,3,4,5,6
,,,,,

나는 성공하지 못한 채 빈 줄을 제거하기 위해 sed 및 awk 명령을 사용해 보았습니다.

sed -i 's/,,//g' fileName.csv

(홀수의 쉼표가 있는 경우 이는 동적 솔루션이 아니기 때문에)

awk -F, 'length>NF+1' fileName.csv > fileName.csv

(파일에 넣으려고 하면 파일에서 모든 줄이 제거됩니다. 아마도 sed 및 awk 명령에 익숙하지 않은 것이 문제일 수 있습니다.)

답변1

데이터 전달

grep '[^,]'

쉼표가 아닌 문자가 포함된 줄이 추출됩니다. 해당 줄을 효과적으로 삭제합니다.오직쉼표를 포함하세요.

예를 들어:

grep '[^,]' filename.csv >newname.csv

쉘은 리디렉션하는 파일을 실행하기 전에 잘라내기(비우기) 때문에 읽고 있는 동일한 이름으로 리디렉션할 수 없습니다 grep.

sed구현이 다음 구문을 지원 하는 경우 sed내부 편집으로 수행할 수도 있습니다.

sed -n -i '/[^,]/p' filename.csv

또는

sed -i '/[^,]/!d' filename.csv

GNU를 사용하여 제자리에서 편집awk:

awk -i inplace '/[^,]/' filename.csv

답변2

요청한 작업을 수행하는 간단한 방법은 Remove the last rows with no data but just commas from a CSV file through shell script다음과 같습니다.

tac file | awk '/[^,]/{f=1} f' | tac

예를 들어:

$ cat file
a,b,c
d,e,f
,,,
g,h,i
,,,
,,,

$ tac file | awk '/[^,]/{f=1} f' | tac
a,b,c
d,e,f
,,,
g,h,i

답변3

쿠살라난다가 제공한 답변

sed -n -i '/[^,]/p' filename.csv

나에게 잘 작동합니다.

또한 awk 및 file을 사용하여 해결 방법을 찾았습니다.

awk -F ',' '$2>" " {print $0}' file.csv > temp.csv && mv temp.csv file.csv

이는 이상적인 솔루션은 아니지만 작동합니다.

관련 정보