2010-08-09 36 views

Respuesta

2

usted puede hacer esto:

echo "XXX.XX" | sed s/\./,/g 
0

creo

s/\./,/g 

debe servir lo que quiere u ... a menos que quieres algo más especial ...

0

Dado que la cuestión es también etiquetados awk:

awk 'gsub(/\./,",")||1' 
+0

no tienen que utilizar || 1, 'awk 'gsub (/\./, "") '' – ghostdog74

+0

@ ghostdog74 gsub' devuelve el número de reemplazos, su versión se salta líneas que no contiene al menos un punto No sé lo suficiente sobre los datos de entrada del OP para omitir '|| 1'. – schot

1

si tiene bash/ksh etc

var=XXX.XXX 
echo ${var/./,} 
+0

Bueno, aquí hay uno más engorroso que funciona en todas las shells POSIX: 'var = XXX.XXX; echo $ {var%. *}, $ {var ## *.} ' – schot

5

¿No sería más exacto ya que los WHAS OP hablando de números .. para asegurarse de que es un número que lleva antes del punto. El documento podría contener otros puntos que el OP no desea sustituir.

sed '/[0-9]\./s/\./,/g' 
4

¿Qué tan riguroso es tu deseo? Puede cambiar todos los caracteres ., como otros han sugerido, pero eso permitirá una gran cantidad de falsos positivos si tiene más que solo números. Un poco más estricta sería requerir que hay dígitos en ambos lados del punto:

$ echo 123.324 2314.234 adfdasf.324 1234123.daf 255.255.255.0 adsf.asdf a1.1a | 
> sed 's/\([[:digit:]]\)\.\([[:digit:]]\)/\1,\2/g' 
123,324 2314,234 adfdasf.324 1234123.daf 255,255,255,0 adsf.asdf a1,1a 

Eso permite cambios en un par de casos raros, a saber 255.255.255.0 y a1.1a, pero maneja los números "normales" limpiamente.

1

Si desea sustituir el separador decimal para fines cosméticos

En la mayoría de los casos tr es probablemente la forma más fácil de sustituir caracteres:

$ echo "0.3"|tr '.' ',' 
0,3 

Por supuesto, si usted se ocupa de los números de mezcla de entrada y cadenas , necesitarás un enfoque más sólido, como el propuesto por Michael J. Barber o incluso más.

Si desea sustituir el separador decimal para fines de cálculo

Por defecto gawk (GNU awk, es decir,la awk de la mayoría de las distribuciones de GNU/Linux) utiliza el punto como separador decimal:

$ echo $LC_NUMERIC 
fr_FR.UTF-8 
$ echo "0.1 0.2"|awk '{print $1+$2}' 
0.3 
$ echo "0,1 0,2"|awk '{print $1+$2}' 
0 

Sin embargo se puede forzar que se use el separador decimal de la localización actual usando la opción --use-lc-numeric:

$ echo $LC_NUMERIC 
fr_FR.UTF-8 
$ echo "0.1 0.2"|awk --use-lc-numeric '{print $1+$2}' 
0 
$ echo "0,1 0,2"|awk --use-lc-numeric '{print $1+$2}' 
0,3 

Si el formato de entrada es diferente de la configuración regional actual, puede, por supuesto, redefinir LC_NUMERIC temporalmente:

$ echo $LC_NUMERIC 
fr_FR.UTF-8 
$ echo "0.1 0.2"|LC_NUMERIC=en_US.UTF-8 awk --use-lc-numeric '{print $1+$2}' 
0 
$ echo "0,1 0,2"|LC_NUMERIC=fr_FR.UTF-8 awk --use-lc-numeric '{print $1+$2}' 
0,3 

(Credits and other links)

Cuestiones relacionadas