【问题标题】:file manipulation unix文件操作Unix
【发布时间】:2019-10-10 10:58:24
【问题描述】:

cat sample_file.txt(从 Control-M 中提取的作业信息)

upctm,pmdw_bip,pmdw_bip_mnt_35-FOLDistAutoRpt,Oct 7 2019 4:45 AM,Oct 7 2019 4:45 AM,1,1,Oct 6 2019 12:00 AM,Ended OK,3ppnc
upctm,pmdw_ddm,pmdw_ddm_dum_01-StartProjDCSDemand,Oct 17 2019 4:02 AM,Oct 17 2019 4:02 AM,3,1,Oct 16 2019 12:00 AM,Ended OK,3pqgq

我需要将此文件处理成数据库表(Oracle) 但是我需要确保那一天是 2 号(例如 7 到 07)。 (例如:Oct 07 2019 6:32 AM

我使用这个命令来获取每一行的所有日期:

cat sample_file.txt | grep "," | while read line
do
 l_start_date=`echo $line|cut -d ',' -f4`
 l_end_date=`echo $line|cut -d ',' -f5`
 l_order_date=`echo $line|cut -d ',' -f8`
 echo $l_start_date
 echo $l_end_date
 echo $l_order_date
done

输出:

Oct 7 2019 4:45 AM
Oct 7 2019 4:45 AM
Oct 6 2019 12:00 AM
Oct 17 2019 4:02 AM
Oct 17 2019 4:02 AM
Oct 16 2019 12:00 AM



expected output:

FROM: Oct 7 2019 6:32 AM
To:  Oct 07 2019 6:32 AM

我使用了这个 sed 命令,但它也增加了 2 天 (17)

sed command sed 's|,Oct |,Oct 0|g' sample_file.txt


Oct 17 was change to Oct 017

upctm,pmdw_bip,pmdw_bip_mnt_35-FOLDistAutoRpt,Oct 07 2019 4:45 AM,Oct 07 2019 4:45 AM,1,1,Oct 06 2019 12:00 AM,Ended OK,3ppnc
upctm,pmdw_ddm,pmdw_ddm_dum_01-StartProjDCSDemand,Oct 017 2019 4:02 AM,Oct 017 2019 4:02 AM,3,1,Oct 016 2019 12:00 AM,Ended OK,3pqgq

【问题讨论】:

  • 欢迎来到 SO!对不起,我在你的编辑中干扰了这么多。我试图让这个问题更容易阅读。您还应该从问题中删除 SQL 标记,因为它与 SQL 无关。
  • @cars10m 很抱歉,非常感谢。我是新来的,所以我对编辑不熟悉。
  • 完成,我使用了这个 sed 的/([Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec]) ([1-9] ) /\1 0\2 /g' sample_file.txt 我怎样才能完成这个?

标签: unix


【解决方案1】:

我希望它更容易,但我只管理了以下内容:

awk.f:

function fmt(s) { 
  split(s,a," "); a[2]=substr(a[2]+100,2)
  return a[1] " " a[2] " "a[3] " " a[4] " " a[5]
}
BEGIN {FS=",";OFS=","}
      {gsub(/ +/," ");
       $4=fmt($4); $5=fmt($5); $8=fmt($8);
       print}

这是一个小 awk 脚本,它首先删除多余的空白,然后挑选出特定的列(4,5 和 8),并将每个日期字符串的第二部分重新格式化为两位数。

你像这样运行脚本:

awk -f  f.awk sample_file.txt 

输出:

upctm,pmdw_aud,pmdw_aud_ext_06-GAPAnalysYTD,Oct 07 2019 6:32 AM,Oct 07 2019 6:32 AM,17,17,Oct 06 2019 12:00 AM,Ended OK,3pu9v
upctm,pmdw_ddm,pmdw_ddm_dum_01-StartProjDCSDemand,Oct 07 2019 4:02 AM,Oct 07 2019 4:02 AM,3,1,Oct 06 2019 12:00 AM,Ended OK,3pqgq
upctm,pmdw_bip,pmdw_bip_mnt_35-FOLDistAutoRpt,Oct 07 2019 4:45 AM,Oct 07 2019 4:45 AM,1,1,Oct 06 2019 12:00 AM,Ended OK,3ppnc

【讨论】:

  • 这个 awk 解决了问题,但他们希望我使用 sed。哈哈哈,但这真的很有帮助。
【解决方案2】:

使用固定的语言环境,您可以进行固定替换,例如

sed -r 's/(Jan|Feb|Oct|Whatever) ([1-9]) /\1 0\2 /g' sample_file.txt

【讨论】:

  • -r 选项对您有用吗?尝试小零件。喜欢sed 's/\(Oct\) \([1-9]\) /\1 0\2 /g' sample_file.txt
猜你喜欢
  • 2018-11-04
  • 2013-05-25
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 2023-03-05
  • 2018-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多