【问题标题】:Change date format from dd/mm/yyyy to yyyy-mm-dd in a file using shell scripting使用 shell 脚本将文件中的日期格式从 dd/mm/yyyy 更改为 yyyy-mm-dd
【发布时间】:2018-04-13 04:32:03
【问题描述】:

我有一个包含 18 列的源文件,其中第 10、11 和 15 列的格式为 dd/mm/yyyy,所有这些都需要转换为 yyyy-mm-dd 并与其他列一起写入目标文件. 我知道变量上的日期格式化函数,但不知道如何在文件中的几列上应用相同的函数。

【问题讨论】:

    标签: linux shell date unix scripting


    【解决方案1】:

    我没有可用于测试的机器,但考虑使用带有一点功能的awk,因为您正在做同样的事情 3 次。它看起来像这样:

    awk ‘
       function dodate(in){
          split(in,/\//,a)   # split existing date into elements of array “a”
          return a[3] “-“ a[2] “-“ a[1]
       }
    
       { $10=dodate($10); $11=dodate($11); $15=dodate($15); print }’ yourFile
    

    awk functionssplit 的参考。

    如果每行的字段用逗号分隔,请告诉awk

    awk -F, ...
    

    【讨论】:

      【解决方案2】:

      也许你可以使用命令awk 来解决它。

      由于您有 3 个包含日期的列(列 10、11、15),这里我假设一个示例字符串,其中字段分隔符是 |,列包含日期是第 4 个列

      aa|bb|cc|29/09/2017|dd|ee|ff
      

      使用String-Manipulation Functions 提取日期,然后使用getline 对其进行格式化以将其格式化为预期的语法。

      命令是

      echo 'aa|bb|cc|2017-09-29|dd|ee|ff' | awk -F\| 'BEGIN{OFS="|"}{$4=gensub(/([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})/,"\\3\\2\\1","g",$4); "date --date=\""$4"\" +\"%F\"" | getline a; $4=a; print $0}'
      

      输出是

      aa|bb|cc|2017-09-29|dd|ee|ff
      

      希望能帮到你。

      【讨论】:

        【解决方案3】:

        如果你安装了dateutils 包,你可以使用dateutils.dconv

        cat file | dateutils.dconv -S -i "%d/%m/%Y"
        
        • -i指定输入日期格式
        • -Ssed模式,只处理匹配的字符串,其余的复制

        输入文件

        aa|bb|cc|29/09/2017|dd|ee|ff|02/10/2017|gg
        

        输出

        aa|bb|cc|2017-09-29|dd|ee|ff|2017-10-02|gg
        

        【讨论】:

          【解决方案4】:

          我会使用 date 命令:

              while read fmtDate
                do
                  date -d ${fmtDate} "+%Y-%m-%d"
               done
          

          【讨论】:

          • OP 在文件的每一行有三个日期。行上的字段可能用逗号分隔,日期在字段 10、11 和 15 中。您的代码似乎没有解决这个问题。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-29
          • 1970-01-01
          相关资源
          最近更新 更多