Awk – erstatt bare ett tegn i en bestemt kolonne

Jeg har en fil som denne:

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 

Jeg vil erstatte alle punktene . i den andre kolonnen med et komma , som jeg ville gjort med sed "s/\./\,/g" file hvordan kan jeg bruke sed eller helst awk for å bare bruke dette for den andre kolonnen, så utdataene mine ville se slik ut:

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 

Svar

$ 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{} denne kodeblokken vil bli utført før du behandler en hvilken som helst inngangslinje
  • FS=OFS=";" sett inn- og utgangsfeltavskiller som ;
  • gsub(/\./, ",", $2) for hver inngangslinje, erstatt alle . i 2. felt med ,
  • 1 er et vanskelig idiom å skrive ut forts ent av $0 (som inneholder inngangsposten)

Svar

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

erstatt den tredje forekomsten av prikken

Svar

Utført med nedenfor metoden ved hjelp av awk

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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *