Awk: sostituisce un carattere solo in una determinata colonna


13

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' filecome posso usare sedo preferibilmente awkapplicare questo solo per la seconda colonna, quindi il mio output sarebbe simile a 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

Risposte:


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{} questo blocco di codice verrà eseguito prima di elaborare qualsiasi riga di input
  • FS=OFS=";" impostare il separatore dei campi di input e output come ;
  • gsub(/\./, ",", $2)per ogni riga di input, sostituire tutto .nel secondo campo con,
  • 1è un linguaggio stupido per stampare il contenuto di $0(che contiene il record di input)

1
fantastico, molto THX!
Nath

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

sostituire la terza occorrenza del punto


2
Un altro uso di Useles di cat... Perché non solo sed 's/\./,/3' file? (Inoltre, non è necessario sfuggire alla virgola.)
twalberg

Ho preso in considerazione le osservazioni
Emilio Galarraga il

catnon sarebbe necessariamente inutile qui. Consentirebbe all'operazione di utilizzare 2 core.
ron rothman,

@ronrothman quale sarebbe lo scopo del core running cat, oltre all'utilizzo delle risorse? Forse per fornire un piccolo buffer, ma allora questa intenzione dovrebbe essere meglio espressa da uno strumento come bufferda cat.
Roland Illig,

Per disaccoppiare le letture del disco (bloccante) dalla sostituzione della stringa. Sì, suppongo che tu possa considerarlo un buffering.
ron rothman,

4

Fatto con il metodo seguente usando awk

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

produzione

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.