awk - 仅替换某一列中的一个字符

nat*_*ath 16 sed awk text-processing

我有一个这样的文件:

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
Run Code Online (Sandbox Code Playgroud)

我想.用逗号替换第二列中的所有点,,就像我sed 's/\./\,/g' file如何使用sed或最好awk只将它应用于第二列一样,所以我的输出看起来像这样:

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
Run Code Online (Sandbox Code Playgroud)

Sun*_*eep 28

$ 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
Run Code Online (Sandbox Code Playgroud)
  • BEGIN{} 此代码块将在处理任何输入行之前执行
  • FS=OFS=";" 将输入和输出字段分隔符设置为 ;
  • gsub(/\./, ",", $2)对于每个输入行,将.第二个字段中的所有内容替换为,
  • 1是一个 awk 成语,用于打印$0(包含输入记录)的内容


Emi*_*aga 9

sed 's/\./,/3' file
Run Code Online (Sandbox Code Playgroud)

替换点的第三次出现


Pra*_* BS 6

使用 awk 通过以下方法完成

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

输出

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
Run Code Online (Sandbox Code Playgroud)