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

grepPCREで使用:

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

答え3

vim私はuseまたはviと同じ構文を使用しますsed。 「:」(コロン)を使ってコマンドモードに入り、次のコマンドを実行します%s/,$//g

答え4

この試み

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

(.*)最後のコンマとそれ以降のすべての項目(スペース)が一致するまですべての項目を一致させ、最後に行全体をに保存された(.+)最初の一致と置き換えます$1

関連情報