免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2964 | 回复: 13
打印 上一主题 下一主题

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

论坛徽章:
1
15-16赛季CBA联赛之深圳
日期:2018-10-30 11:58:07
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 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
2 [报告]
发表于 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 很给力!

查看全部评分

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
3 [报告]
发表于 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
4 [报告]
发表于 2018-10-30 18:48 来自手机 |只看该作者
wh7211 发表于 2018-10-30 18:08
回复 1# cuiyubing819

祝您生活愉快,谢谢大佬

论坛徽章:
1
15-16赛季CBA联赛之深圳
日期:2018-10-30 11:58:07
5 [报告]
发表于 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
6 [报告]
发表于 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
7 [报告]
发表于 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
8 [报告]
发表于 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
9 [报告]
发表于 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
10 [报告]
发表于 2018-10-31 11:25 |只看该作者
awk中的close()指令, 语法有两种, close( filename ) 和close( 置于pipe之前的command ),awk中打开文件或使用pipe,close是必不可少的,否则可能出现文件句柄泄露或从管道拿到的都是之前命令的数据,就如你遇到的情况。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP