Awk – csak egy karakter cseréje egy bizonyos oszlopban

Van egy ilyen fájlom:

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 

A második oszlopban lévő összes pontot . egy vesszővel , szeretném lecserélni, ahogyan ezt a hogyan használhatom a sed vagy lehetőleg a awk alkalmazást, hogy ezt csak a második oszlopra alkalmazzam, így a kimenetem így néz ki:

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 

Válasz

$ 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{} ez a blokk blokk végrehajtásra kerül bármely bemeneti sor feldolgozása előtt
  • FS=OFS=";" állítsa be a bemeneti és kimeneti mező elválasztóját ;
  • gsub(/\./, ",", $2) elemre minden bemeneti sornál, cserélje le az összes . a 2. mezőben, a ,
  • iv

alkalmazással folytatás

(amely a bemeneti rekordot tartalmazza) ents

Válasz

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

pótolja a pont harmadik előfordulását

Válasz

Készítette alábbi módszer az awk használatával

Parancs: 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 

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük