-1

我问了一个类似的问题,很抱歉问这个问题,但我不知道如何解决它。

输入:

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

期望的输出:

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

我希望仅从十进制数字中删除“+”。所以基本上我的要求是将有符号的数字转换为无符号的。

请提前帮助和感谢。

4

3 回答 3

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,

解释

这个想法是执行 a $field + 0,这样如果它是数字的,+就会下降。否则,字符串将保持不变。因此,解决方案遍历所有字段(基于逗号分隔符,FS)并在完成检查后打印它们。


为了去掉结尾的逗号,Saurabh 建议这样:

awk ... | sed 's/.$//g' 
于 2013-10-11T09:52:06.347 回答
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 回答
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 回答