各行の最後のコンマを削除する必要があります。
次の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
vim
私はuseまたはvi
と同じ構文を使用しますsed
。 「:」(コロン)を使ってコマンドモードに入り、次のコマンドを実行します%s/,$//g
。
答え4
この試み
perl -pi -e 's/^(.*),(.+)$/$1/' conv2015_10_LogicalComponent_CosProfile.csv
(.*)
最後のコンマとそれ以降のすべての項目(スペース)が一致するまですべての項目を一致させ、最後に行全体をに保存された(.+)
最初の一致と置き換えます$1
。