我问了一个类似的问题,很遗憾地问这个,但我没有得到解决方法。
输入:
+1234.56,a,b,,++,+++++++,+++,+546.76,a,b
期望的输出:
1234.56,a,b,,++,+++++++,+++,546.76,a,b
我希望仅从十进制数中删除'+'。所以基本上我的要求是将有符号数转换为无符号数。
请提前帮助和谢谢。
答案 0 :(得分: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'
答案 1 :(得分:1)
使用gnu awk
,您可以执行此操作:
awk '{print gensub(/\+([0-9])/,"\\1","g")}' file
1234.56,a,b,,++,+++++++,+++,546.76,a,b
当+
位于任意数字[0-9]
答案 2 :(得分: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.