寻找与 sed 替代等效的 awk gsub

问题描述 投票:0回答:1

我正在使用以下 sed 命令,我想将其转移到 awk 以将日期从2023-12-15更改为15/12/2023

echo "c_az_6332,2023-12-15,-24.01,BP_Connect,Particulars,details" \
 | sed 's/\(....\)-\(..\)-\(..\)/\3\/\2\/\1/g'

导致

c_az_6332,15/12/2023,-24.01,BP_Connect,Particulars,details

如何使用 awk gsub|sub|gensub 执行相同操作?

我尝试过以下方法:

echo "c_az_6332,2023-12-15,-24.01,BP_Connect,Particulars,details" \
 | awk -F "," '{gsub(\(....\)-\(..\)-\(..\),\3\/\2\/\1,$2) ; print $0}'

echo "c_az_6332,2023-12-15,-24.01,BP_Connect,Particulars,details" \
 | awk -F "," '{gsub(/\(....\)-\(..\)-\(..\)/,\3\/\2\/\1,$2) ; print $0}'

两者都不起作用。有人可以帮忙吗?

awk sed
1个回答
0
投票
  • 使用
    ,
    作为输入 (
    FS
    ) 和输出 (
    OFS
    ) 的字段分隔符:
    FS = OFS = ","
  • 将破折号处的第二个字段 (
    $2
    ) 拆分为命名数组:
    split($2, a, "-")
  • 使用
    sprintf
    和数组项重新格式化第 2 列:
    $2 = sprintf("%d/%d/%d", a[3], a[2], a[1])
echo "c_az_6332,2023-12-15,-24.01,BP_Connect,Particulars,details" | awk '
  BEGIN { FS = OFS = ","; }
        { split($2, a, "-");
          $2 = sprintf("%d/%d/%d", a[3], a[2], a[1]);
          print;
        }
'
c_az_6332,15/12/2023,-24.01,BP_Connect,Particulars,details
© www.soinside.com 2019 - 2024. All rights reserved.