如何使用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

另外要澄清为什么“。”在那里使用而不是“,”。这是正则表达式,几乎可以匹配任何字符,所以如果有“;”它也将取代它。你说得更精确一点,你可以.$改成,$

编辑:

我注意到你提到你的末尾实际上有空格。所以即使有空格,这段代码也能工作。已在 Solaris 上得到验证。

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

grep与 PCRE 一起使用:

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

答案3

我会使用 usevimvi.语法与 相同sed。使用“:”(冒号)进入命令模式,然后运行%s/,$//g

答案4

尝试这个

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

(.*)将匹配所有内容,直到最后一个逗号及其后的任何内容(空格)都可以与 匹配(.+),最后用存储在 中的第一个匹配项替换整行$1

相关内容