-1

同様の質問をしたことがありますが、申し訳ありませんが、修正方法がわかりません。

入力:

+1234.56,a,b,,++,+++++++,+++,+546.76,a,b

望ましい出力:

1234.56,a,b,,++,+++++++,+++,546.76,a,b

「+」を 10 進数からのみ削除したい。したがって、基本的に私の要件は、符号付き数値を符号なしに変換することです。

助けてください、事前に感謝します。

4

3 に答える 3

1

を使用するgnu awkと、次のことができます。

awk '{print gensub(/\+([0-9])/,"\\1","g")}' file
1234.56,a,b,,++,+++++++,+++,546.76,a,b

+任意の数字の前にある場合は削除します[0-9]

于 2013-10-11T10:25:29.850 に答える
1

私はソリューションが完全に好きではありません...しかし、最後に末尾のコンマを追加しても機能します:

$ 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' 
于 2013-10-11T09:52:06.347 に答える
0

これはうまくいくかもしれません(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 で置き換えます。

于 2013-10-12T07:48:56.737 に答える