在 Bash 中使用 gsub 通过正则表达式重新格式化日期

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

我想在 Bash 中使用 gsub 将日期从 DD/MM/YYYY 重新格式化为 YYYY-MM-DD。

我使用了命令:

awk '{gsub(/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/, "([0-9]{4})\-([0-9]{2})\-([0-9]{2})", $4)}1' OFS='       ' example.tsv > example_date.tsv

在输入文件上:

No  Name    LastName    Date    
1   Jane    Doe         24/05/78    
2   James   Cook        04/04/74    
3   Jack    Smith       24/05/78
4   John    Beck        20/10/80

输出文件 example_date.tsv 与输入文件完全相同。我想知道这里可以改变什么。感谢您的帮助。

bash date awk gsub
1个回答
0
投票

仅使用您显示的示例,请尝试在 GNU

awk
中执行以下操作。

awk -v RS='[[:space:]]+[0-9]+\\/[0-9]+\\/[0-9]+(\\s+|$)' '
RT && sub(/\n+$/,"",RT){
  match(RT,/^([[:space:]]+)([^/]+)\/([^/]+)\/([0-9]+)(.*)$/,arr)
  print $0 arr[1] arr[4] "/" arr[3] "/" arr[2]
}
' Input_file
© www.soinside.com 2019 - 2024. All rights reserved.