首页 > 其他分享 >妙用awk

妙用awk

时间:2023-09-22 13:55:38浏览次数:31  
标签:妙用 22 20230820 awk intl txt 入库

需求 采集到的数据入库前需要加上一个入库日期时间字段
storage_time YYYY-MM-DD HH:MM:SS 例如:2023-09-22 13:40:00

下面是在chatgpt配合下我进行的尝试

第一次尝试失败

源数据

20230820 南京 5664
20230820 徐州 1340
20230820 淮安 463
20230820 扬州 868
20230820 泰州 704
20230820 南通 1350
20230820 镇江 652
20230820 苏州 5473
20230820 连云港 1121
20230820 宿迁 378

原数据截图

awk '{print $0, "2023-09-22 10:00:00"}' stg_d_bp_daping_intl_roam_out_hprov_20230921.txt > oh.txt
处理后数据截图

处理后我尝试将数据入库,结果失败了

开始排查问题

开始排查问题
awk '{print $NF}' stg_d_bp_daping_intl_roam_out_hprov_20230921.txt

发现我加的时间戳 "2023-09-22 10:00:00" 被识别成两列数据了
awk '{for (i=1; i<NF; i++) printf "%s ", $i; print ""}' stg_d_bp_daping_intl_roam_out_hprov_20230921.txt >> o_hp.txt

将时分秒舍弃,只留年月日数据
再次尝试将数据入库,发现还是失败

继续排查问题,成功将数据入库

继续排查问题
发现是因为这样处理后列于列之间的间隔符变成了空格,而非制表符,不能满足入库脚本的调度
awk -F' ' 'BEGIN {OFS="\t"} {$1=$1; print}' stg_d_bp_daping_intl_roam_out_hprov_20230921.txt >> test1.txt

ok,再次尝试执行入库脚本,success

简化awk命令代码

尝试简化代码,来完成剩下数据表的入库
直接加一列年月日数据
awk '{print $0, "2023-09-22"}' stg_d_bp_daping_intl_roam_out_hcity_20230921.txt > ohc.txt

发现最后一列与前面的列之间的分隔符是空格

继续优化

继续优化
awk -v OFS="\t" '{$(NF+1)="2023-09-22"; print}' stg_d_bp_daping_intl_roam_out_hcity_20230921.txt > ohc21.txt

思考

第一次舍弃时分秒,是因为没有指定输出结果的分隔符,如果我指定分隔符为制表符就可以把日期时间都准确入库了

标签:妙用,22,20230820,awk,intl,txt,入库
From: https://www.cnblogs.com/grow-with-the-times/p/17722146.html

相关文章

  • Linux持续学习者的必备工具:文本处理神器awk
    Linux持续学习者的必备工具:文本处理神器awk原创 运维家 运维家 2023-09-0215:09 发表于北京收录于合集#awk1个#linux52个引言作为一名Linux持续学习者,我们经常需要处理各种各样的文本文件,例如日志文件、配置文件等。而对于大规模的文本数据,手动处理往往效率......
  • Android 妙用TextView实现左边文字,右边图片
    有时候,需要文字在左边,右边有个箭头,我个人之前会有两种做法:使用线性布局来实现或者使用约束布局,一个左对齐,一个右对齐这几天突然想到是否可以使用TextView的设置图标的方式实现,研究发现确实可以实现我的需求,也是记录下文字和图标左右显示效果:代码:<TextViewandroid:id="@+id/......
  • linux中grep与find的区别,Linux三剑客【grep、sed和awk】
    在使用linux时,经常需要进行文件查找。其中查找的命令主要有find和grep。两个命令是有区的。区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。(2)grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)......
  • linux 中awk命令删除文件的最后一列
     001、[root@pc1test4]#lsa.txt[root@pc1test4]#cata.txt##测试文件010203040506070809101112131415161718192021222324252627282930[root@pc1test4]#awk'NF{NF--}1'a.txt##删除最后一列0102030405......
  • grep、awk、sed
    grep<grep[选项]模式[文件...]>-i,--ignore-case:忽略大小写,使搜索不区分大小写。-v,--invert-match:反转匹配,仅显示不包含指定模式的行。-r,--recursive:递归搜索,用于在指定目录及其子目录中搜索文件。-l,--files-with-matches:仅显示包含匹配模式的文件名,而不是匹配......
  • ShutdownHook妙用
    上期文章分享了ShutdownHook的API和基本使用,但是少了一些实际工作中的案例,总感觉没啥大用一样。最近总结工作中可以用到ShutdownHook来解决一些实际问题的例子,分享给大家。任务统计FunTester测试框架定义了好几个自定义的异步关键字,例如fun、funny、funner等。一旦使用到异步,肯......
  • linux 中 awk命令实现文件按列精确匹配合并
     001、[root@pc1test01]#cata.txtA:10B:5C:12[root@pc1test01]#catb.txt100A50B88K99Y42C[root@pc1test01]#awk'{if(NR==FNR){ay[$1]=$2}else{print$2,$1,ay[$2]}}'FS=":"a.txtFS=""b.txtA10010......
  • linux 中awk命令同时多多个文件指定分隔符
     001、正确做法[root@pc1test01]#lsa.txtb.txt[root@pc1test01]#cata.txtA:10B:5C:12[root@pc1test01]#catb.txt100A50B42C[root@pc1test01]#awk'{if(NR==FNR){print$2}else{print$1}}'FS=":"a.txtFS=""b......
  • linux 中 awk命令实现文件按列匹配
     001、方法1[root@pc1test01]#lsa.txtb.txt[root@pc1test01]#cata.txtA:10B:5C:12[root@pc1test01]#catb.txt100A50B42C[root@pc1test01]#awk-F"[:]"'{if(NR==FNR){ay[$1]=$2}else{print$2,$1,ay[$2]}}'a.txtb......
  • linux 中awk命令指定读入分隔符
     001、-F指定[root@pc1test01]#lsa.txt[root@pc1test01]#cata.txta:b:c3:8:kf:6:3[root@pc1test01]#awk-F":"'{print$1}'a.txta3f 002、-vFS变量指定[root@pc1test01]#lsa.txt[root@pc1test01]#cata.txta:b:c3:8:k......