首页 > 解决方案 > 使用文件中的数据将日期和时间放在每一行中

问题描述

有人可以帮我输出以下内容吗:

前:

Thu May 27|14:23:17.068|A|0002|MSU Received Last Min|18858
Thu May 27|14:24:17.069|A|0002|MSU Received Last Min|19216
Thu May 27|14:25:17.070|A|0002|MSU Received Last Min|19702
Thu May 27|14:26:17.072|A|0002|MSU Received Last Min|20190
Thu May 27|14:27:17.073|A|0002|MSU Received Last Min|19871

后:

2021-05-27 14:23:17|A|0002|MSU Received Last Min|18858
2021-05-27 14:24:17|A|0002|MSU Received Last Min|19216
2021-05-27 14:25:17|A|0002|MSU Received Last Min|19702
2021-05-27 14:26:17|A|0002|MSU Received Last Min|20190
2021-05-27 14:27:17|A|0002|MSU Received Last Min|19871

标签: linuxshell

解决方案


这是一种逐行处理的方法(假设输入在 input.txt 文件中):

cat input.txt | while read line; do dateField=$(echo $line | cut -d '|' -f 1); fields=$(echo $line | cut -d '|' -f 2-);  echo -n `date -d "$dateField" +'%Y-%m-%d'`' '; echo  $fields; done

这会产生预期的结果。

解释

  • cat input.txt:设置输入;
  • while read line; do:循环线到线;
  • dateField=$(echo $line | cut -d '|' -f 1):将第一个字段(日期)分配给 dateField 变量;
  • fields=$(echo $line | cut -d '|' -f 2-):将其余字段分配给 fields 变量;
  • echo -n `date -d "$dateField" +'%Y-%m-%d'`' ':按照您的指示格式化日期,没有换行符(echo -n ...),并在末尾连接空格;
  • echo $fields:打印其余字段。

推荐阅读