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
nath
fuente

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)
Sundeep
fuente
1
impresionante, mucho THX!
nath
9
sed 's/\./,/3' file

reemplazar la tercera ocurrencia del punto

Emilio Galarraga
fuente
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
Praveen Kumar BS
fuente