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

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

我想.用逗号替换第二列中的所有点,,就像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

答案1

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

答案2

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

替换第三次出现的点

答案3

使用 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

相关内容