이상적으로는 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
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
이는 이상적인 솔루션은 아니지만 작동합니다.