同様の質問をしたことがありますが、申し訳ありませんが、修正方法がわかりません。
入力:
+1234.56,a,b,,++,+++++++,+++,+546.76,a,b
望ましい出力:
1234.56,a,b,,++,+++++++,+++,546.76,a,b
「+」を 10 進数からのみ削除したい。したがって、基本的に私の要件は、符号付き数値を符号なしに変換することです。
助けてください、事前に感謝します。
同様の質問をしたことがありますが、申し訳ありませんが、修正方法がわかりません。
入力:
+1234.56,a,b,,++,+++++++,+++,+546.76,a,b
望ましい出力:
1234.56,a,b,,++,+++++++,+++,546.76,a,b
「+」を 10 進数からのみ削除したい。したがって、基本的に私の要件は、符号付き数値を符号なしに変換することです。
助けてください、事前に感謝します。
を使用するgnu awk
と、次のことができます。
awk '{print gensub(/\+([0-9])/,"\\1","g")}' file
1234.56,a,b,,++,+++++++,+++,546.76,a,b
+
任意の数字の前にある場合は削除します[0-9]
私はソリューションが完全に好きではありません...しかし、最後に末尾のコンマを追加しても機能します:
$ awk 'BEGIN{FS=","} {for (i=1; i<=NF; i++) {if ($i+0==$i) {$i=$i+0}; printf "%s,", $i}}' a
1234.56,a,b,,++,+++++++,+++,546.76,a,b,
アイデアは、 を実行することです。$field + 0
これにより、数値の場合は+
が落ちます。それ以外の場合、文字列は同じままになります。そのため、ソリューションはすべてのフィールドを (カンマ区切り記号に基づいてFS
) ループし、そのチェックを行った後にそれらを出力します。
末尾のコンマを取り除くために、Saurabh は次の方法を提案しています。
awk ... | sed 's/.$//g'
これはうまくいくかもしれません(GNU sed):
sed -r 's/(^|,)\+([0-9]+\.[0-9]+)/\1\2/g' file
または(ピンチで):
sed -r 's/(^|,)\+([0-9])/\1\2/g' file
後方参照1 でファイルの先頭またはコンマをキャプチャし、その後に+
符号を付け、その後に数字とその後に数字.
を続けて後方参照 2 にキャプチャします。後方参照 1 と 2 で置き換えます。