Awk – sostituisci solo un carattere in una determinata colonna

Ho un file come questo:

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 

Voglio sostituire tutti i punti . nella seconda colonna con una virgola , come farei con sed "s/\./\,/g" file come posso utilizzare sed o preferibilmente awk per applicarlo solo per la seconda colonna, quindi il mio output sarebbe avere questo aspetto:

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 

Risposta

$ 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{} questo blocco di codice verrà eseguito prima di elaborare qualsiasi riga di input
  • FS=OFS=";" imposta il separatore dei campi di input e output come ;
  • gsub(/\./, ",", $2) per ogni riga di input, sostituisci tutti i . nel secondo campo con ,
  • 1 è un idioma awk da stampare cont ents of $0 (che contiene il record di input)

Answer

sed "s/\./,/3" file 

sostituisci la terza occorrenza del punto

Risposta

Fatto da metodo riportato di seguito utilizzando awk

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

output

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 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *