Awk: reemplaza un personaje solo en una columna determinada


13

Tengo un archivo como este:

2018.01.02;1.5;comment 1
2018.01.04;2.75;comment 2
2018.01.07;5.25;comment 4
2018.01.09;1.25;comment 7

Quiero reemplazar todos los puntos .en la segunda columna con una coma ,como lo haría con sed 's/\./\,/g' filecómo puedo usar sedo preferiblemente awkpara aplicar esto solo para la segunda columna, por lo que mi salida se vería así:

2018.01.02;1,5;comment 1
2018.01.04;2,75;comment 2
2018.01.07;5,25;comment 4
2018.01.09;1,25;comment 7

Respuestas:


22
$ awk 'BEGIN{FS=OFS=";"} {gsub(/\./, ",", $2)} 1' ip.txt
2018.01.02;1,5;comment 1
2018.01.04;2,75;comment 2
2018.01.07;5,25;comment 4
2018.01.09;1,25;comment 7
  • BEGIN{} este bloque de código se ejecutará antes de procesar cualquier línea de entrada
  • FS=OFS=";" establecer el separador de campo de entrada y salida como ;
  • gsub(/\./, ",", $2)para cada línea de entrada, reemplace todo .en el segundo campo con,
  • 1es un idioma awk para imprimir contenidos $0(que contiene el registro de entrada)

1
impresionante, mucho THX!
nath

9
sed 's/\./,/3' file

reemplazar la tercera ocurrencia del punto


2
Otro uso de uso de cat... ¿Por qué no solo sed 's/\./,/3' file? (Además, no es necesario escapar de la coma.)
twalberg

Tomé en cuenta las observaciones
Emilio Galarraga

catNo sería necesariamente inútil aquí. Permitiría que la operación use 2 núcleos.
Ron Rothman

@ronrothman, ¿cuál sería el propósito de la ejecución principal cat, aparte de usar recursos? Tal vez para proporcionar un buffer poco, pero luego esta intención debe ser mejor expresada por una herramienta como bufferque por cat.
Roland Illig

Para desacoplar las lecturas de disco (de bloqueo) del reemplazo de la cadena. Sí, supongo que puedes pensar en ello como amortiguamiento.
Ron Rothman

4

Hecho por el siguiente método usando awk

Mando: awk -F ";" '{gsub(/\./,",",$2);print $1";"$2";"$3}' filename

salida

2018.01.02;1,5;comment 1
2018.01.04;2,75;comment 2
2018.01.07;5,25;comment 4
2018.01.09;1,25;comment 7
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.