Linux를 사용하여 CSV에서 각 행의 마지막 쉼표를 제거하는 방법

Linux를 사용하여 CSV에서 각 행의 마지막 쉼표를 제거하는 방법

각 줄의 마지막 쉼표를 제거해야 합니다.

다음과 같은 csv 파일이 있습니다.

98,N,N,N,N,S,
99,N,N,N,N,S,
101,Y,Y,Y,Y,S,

다음 스크립트가 있지만 작동하지 않습니다.

for fname in conv2015_10_LogicalComponent_CosProfile.csv
do
   sed 's/.$//' $fname > tmp.tmp
   mv tmp.tmp $fname
done

답변1

이것은 작동합니다.

for fname in conv2015_10_LogicalComponent_CosProfile.csv
  do
    cat $fname | sed 's/.$//' > tmp.tmp
    mv tmp.tmp $fname
  done

또 다른 옵션은 GNU Sed 옵션을 사용하는 경우입니다 -i.

그런 다음 이렇게 하면 됩니다.

sed -i 's/.$//' filename

또한 "," 대신 "."이 사용되는 이유를 명확히 합니다. 이는 정규식이며 거의 모든 문자와 일치하므로 ";"이 있으면 해당 문자도 대체됩니다. 더 정확할 수도 있고 .$로 변경할 수도 있습니다 ,$.

편집하다:

실제로 끝에 공백이 있다고 언급하신 것을 확인했습니다. 따라서 이 코드는 공백이 있어도 작동합니다. 솔라리스에서 검증되었습니다.

cat filename | sed 's/,[[:blank:]]*$//g' > tmp.tmp
mv tmp.tmp desired_filename

답변2

bash매개변수 확장 사용 :

while IFS= read -r line; do echo "${line%,}"; done <file.txt

사용 sed:

sed 's/,$//' file.txt

grepPCRE와 함께 사용:

grep -Po '.*(?=,$)' file.txt 

답변3

vim나는 use 또는 vi와 동일한 구문을 사용합니다 sed. ":"(콜론)을 사용하여 명령 모드로 들어간 다음 를 실행합니다 %s/,$//g.

답변4

이 시도

perl -pi -e 's/^(.*),(.+)$/$1/' conv2015_10_LogicalComponent_CosProfile.csv

(.*)마지막 쉼표와 그 뒤의 모든 항목(공백)이 일치할 수 있을 때까지 모든 항목을 일치시키고 (.+), 마지막으로 전체 줄을 에 저장된 첫 번째 일치 항목으로 바꿉니다 $1.

관련 정보