Awk – korvaa vain yhden merkin tietyssä sarakkeessa

Minulla on tällainen tiedosto:

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 

Haluan korvata kaikki toisen sarakkeen pisteet . pilkulla , kuten tekisin sed "s/\./\,/g" file miten voin käyttää sed tai mieluiten awk tätä vain toiseen sarakkeeseen, joten lähtöni näyttää tältä:

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 

Vastaa

$ 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{} tämä koodilohko suoritetaan ennen minkä tahansa syöttörivin käsittelyä.
  • FS=OFS=";" aseta tulo- ja lähtökentän erotin ;
  • gsub(/\./, ",", $2) jokaiselle tuloriville, korvaa kaikki . 2. kentässä ,
  • 1 on awk-idioomi tulostettavaksi jatkuu $0 (joka sisältää syötetietueen) entsentit

Vastaa

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

korvaa pisteen kolmannen esiintymän

vastaus

Valmis alla oleva menetelmä awk: n avulla

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

lähtö

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 

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *