首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件操作unix

文件操作unix
EN

Stack Overflow用户
提问于 2019-10-09 13:38:10
回答 2查看 45关注 0票数 0

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

代码语言:javascript
复制
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

我需要将这个文件处理成DB表(Oracle),但我需要确保日期是2个数字(例7到07)。(示例:Oct 07 2019 6:32 AM)

我使用以下命令来获取每行中的所有日期:

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
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命令,但它也将两个数字相加(17)

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-09 14:24:28

我希望它更简单,但我只做到了以下几点:

笨拙.f:

代码语言:javascript
复制
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),并将每个日期字符串的第二部分重新格式化为两位数。

您可以像这样运行脚本:

代码语言:javascript
复制
awk -f  f.awk sample_file.txt 

输出:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2019-10-09 16:47:24

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

代码语言:javascript
复制
sed -r 's/(Jan|Feb|Oct|Whatever) ([1-9]) /\1 0\2 /g' sample_file.txt
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58297678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档