![쉘 스크립트를 통해 CSV 파일에서 데이터는 없고 쉼표만 있는 마지막 행을 제거합니다.](https://linux55.com/image/196095/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%ED%86%B5%ED%95%B4%20CSV%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%8A%94%20%EC%97%86%EA%B3%A0%20%EC%89%BC%ED%91%9C%EB%A7%8C%20%EC%9E%88%EB%8A%94%20%EB%A7%88%EC%A7%80%EB%A7%89%20%ED%96%89%EC%9D%84%20%EC%A0%9C%EA%B1%B0%ED%95%A9%EB%8B%88%EB%8B%A4..png)
이상적으로는 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
이는 이상적인 솔루션은 아니지만 작동합니다.