免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12下一页
最近访问板块 发新帖
查看: 880 | 回复: 13

[文本处理] awk 如何格式化某列时间串 [复制链接]

论坛徽章:
1
15-16赛季CBA联赛之深圳
日期:2018-10-30 11:58:07
发表于 2018-10-30 17:12 |显示全部楼层
awk  -F "," '{print strftime("%Y%m%d", $4) }' txt
19700101
19700101
19700101
19700101
19700101
19700101
$ cat txt
"0553","551","","1999/12/21","2999/12/20 23:59:59",""
"0564","551","","1999/12/21","2999/12/20 23:59:59",""
"0556","551","","2999/12/21","2999/12/20 23:59:59",""
"0563","551","","1999/12/21","1994/12/20 23:59:59",""
"0562","551","ͭ"1999/12/21","2999/12/20 23:59:59",""
"0552","551","","1999/12/21","1999/12/20 23:59:59",""
$
我想格式化输出第4列 为什么上面输出为19700101,
如何打印系统时间大于第四列的时间串的行数据呢?
哪位大佬帮忙解答下谢谢


论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-12-17 06:20:00
发表于 2018-10-30 17:54 |显示全部楼层
awk -F ',' '{cmd="date -d "$4" \"+%Y%m%d\"";cmd|getline dt;print dt;close(cmd)}' txt  ;你代码中strftime 第二个参数 $4 应该是时间戳格式,所以你的输出为19700101

评分

参与人数 1信誉积分 +5 收起 理由
cuiyubing819 + 5 很给力!

查看全部评分

论坛徽章:
19
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:33黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:0915-16赛季CBA联赛之八一
日期:2018-07-03 16:56:4615-16赛季CBA联赛之深圳
日期:2018-06-15 14:59:3715-16赛季CBA联赛之青岛
日期:2018-06-08 13:45:2815-16赛季CBA联赛之同曦
日期:2018-06-04 19:42:2015-16赛季CBA联赛之山东
日期:2018-05-30 12:44:59CU十四周年纪念徽章
日期:2018-05-15 11:36:3815-16赛季CBA联赛之广东
日期:2018-05-14 09:52:42
发表于 2018-10-30 18:08 |显示全部楼层
本帖最后由 wh7211 于 2018-10-30 18:12 编辑

回复 1# cuiyubing819


我想格式化输出第4列 为什么上面输出为19700101,
  1. awk -F"," '{split($4,a,"[\"/]");print a[2]a[3]a[4]}' txt
  2. awk -F"," '{split($4,a,"[\"/]");b=mktime(""a[2]" "a[3]" "a[4]" 00 00 00");print strftime("%Y%m%d",b)}' txt
复制代码
如何打印系统时间大于第四列的时间串的行数据呢?
  1. awk -F"," '{split($4,a,"[\"/]");b=mktime(""a[2]" "a[3]" "a[4]" 00 00 00")}systime()>b' txt
复制代码

论坛徽章:
1
15-16赛季CBA联赛之深圳
日期:2018-10-30 11:58:07
发表于 2018-10-30 18:48 来自手机 |显示全部楼层
wh7211 发表于 2018-10-30 18:08
回复 1# cuiyubing819

祝您生活愉快,谢谢大佬

论坛徽章:
1
15-16赛季CBA联赛之深圳
日期:2018-10-30 11:58:07
发表于 2018-10-30 18:49 来自手机 |显示全部楼层
vagrant_1220 发表于 2018-10-30 17:54
awk -F ',' '{cmd="date -d "$4" \"+%Y%m%d\"";cmd|getline dt;print dt;close(cmd)}' txt  ;你代码中strf ...

感谢大佬讲解,祝您生活愉快

论坛徽章:
1
15-16赛季CBA联赛之深圳
日期:2018-10-30 11:58:07
发表于 2018-10-31 09:59 |显示全部楼层
回复 2# vagrant_1220

$ awk -F ',' '{cmd="date -d "$4" \"+%Y%m%d\"";cmd|getline dt;print dt}' txt
19991221
19991221
29991221
29991221
29991220
29991220
$ awk -F ',' '{cmd="date -d "$4" \"+%Y%m%d\"";cmd|getline dt;print dt;close(cmd)}' txt
19991221
19991221
29991221
19991221
29991220
19991221

大佬加close 和不加close的区别为啥这么大,是不是 必须和getline配合用吗

论坛徽章:
1
15-16赛季CBA联赛之深圳
日期:2018-10-30 11:58:07
发表于 2018-10-31 10:01 |显示全部楼层
回复 2# vagrant_1220

$ awk -F ',' '{cmd="date -d "$4" \"+%Y%m%d\"";cmd|getline dt;print dt}' txt
19991221
19991221
29991221
29991221
29991220
29991220
$ awk -F ',' '{cmd="date -d "$4" \"+%Y%m%d\"";cmd|getline dt;print dt;close(cmd)}' txt
19991221
19991221
29991221
19991221
29991220
19991221

大佬加close 和不加close的区别为啥这么大,是不是 必须和getline

论坛徽章:
1
15-16赛季CBA联赛之深圳
日期:2018-10-30 11:58:07
发表于 2018-10-31 10:02 |显示全部楼层
回复 2# vagrant_1220

awk -F ',' '{cmd="date -d "$4" \"+%Y%m%d\"";cmd|getline dt;print dt}' txt
19991221
19991221
29991221
29991221
29991220
29991220
awk -F ',' '{cmd="date -d "$4" \"+%Y%m%d\"";cmd|getline dt;print dt;close(cmd)}' txt
19991221
19991221
29991221
19991221
29991220
19991221

大佬加close 和不加close的区别为啥这么大,是不是 必须和getline

论坛徽章:
1
15-16赛季CBA联赛之深圳
日期:2018-10-30 11:58:07
发表于 2018-10-31 10:48 |显示全部楼层
回复 3# wh7211

$ cat txt
"0553","551","","1999/12/21","2999/12/20 23:59:59",""
"0564","551","","1999/12/21","2999/12/20 23:59:59",""
"0556","551","","2999/12/21","2999/12/20 23:59:59",""
"0563","551","","1999/12/21","1994/12/20 23:59:59",""
"0562","551","ͭ"1999/12/21","2999/12/20 23:59:59",""
"0552","551","","1999/12/21","1999/12/20 23:59:59",""
大佬来个组合的系统时间判断,
我的最终需求是
打印第四列小于系统时间,第5列大于系统时间的行数据,
谢谢大佬回复

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-12-17 06:20:00
发表于 2018-10-31 11:25 |显示全部楼层
awk中的close()指令, 语法有两种, close( filename ) 和close( 置于pipe之前的command ),awk中打开文件或使用pipe,close是必不可少的,否则可能出现文件句柄泄露或从管道拿到的都是之前命令的数据,就如你遇到的情况。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP