免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 老aakk
打印 上一主题 下一主题

[文本处理] (已解决) [复制链接]

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
1 [报告]
发表于 2014-07-24 09:10 |显示全部楼层
本帖最后由 Herowinter 于 2014-07-24 09:17 编辑

回复 1# 老aakk

位数不固定不好处理,如果是yyyymmdd格式会简单不少。

而且,你这种日期写法有歧义,比如
1971128
可以表示     1971年1月28日
也可以表示  1971年12月8日
。。。。
   

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
2 [报告]
发表于 2014-07-24 10:13 |显示全部楼层
回复 22# q1208c

楼主的数据里面有这种6位、7位数字表达的日期,这才是头痛的地方。
比如
1971128
200989   

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
3 [报告]
发表于 2014-07-24 11:13 |显示全部楼层
@yestreenstars
错误的日期,awk的mktime不是返回-1吗?
  1. echo |awk '{print mktime("2012 02 30 00 00 00")}'
  2. 1330531200
复制代码

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
4 [报告]
发表于 2014-07-24 11:20 |显示全部楼层
回复 32# yestreenstars
那悲剧了,我代码都写得差不多了,结果发现mktime没办法验证
日期非法。

   

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
5 [报告]
发表于 2014-07-24 13:48 |显示全部楼层
本帖最后由 Herowinter 于 2014-07-24 14:16 编辑

@老aakk@yestreenstars @q1208c
参考了q兄的想法实现了下,可能不是很专业,欢迎提出改进意见。
  1. #!/bin/bash

  2. function checkDate(){
  3.     case ${#1} in
  4.     8)
  5.         date -d"$1" &>/dev/null
  6.         return $?
  7.         ;;
  8.     7)  
  9.         date -d"${1:0:4}0${1:4}" &>/dev/null
  10.         ret1=$?
  11.         date -d"${1:0:6}0${1:6}" &>/dev/null
  12.         ret2=$?
  13.         if [ $ret1 -eq 1 ] && [ $ret2 -eq 1 ];then
  14.            return 1
  15.         else
  16.            return 0
  17.         fi
  18.         ;;
  19.     6)
  20.         date -d"${1:0:4}0${1:4:1}0${1:5}" &>/dev/null
  21.         return $?
  22.         ;;
  23.     *)
  24.         return 1
  25.         ;;
  26.     esac
  27. }

  28. while read line
  29. do
  30.     dstr=`sed -r 's/[^0-9]*([0-9]*).*/\1/'<<<"$line"`
  31.     checkDate $dstr
  32.     [ $? -eq 1 ]&&echo "$line"
  33. done <i
复制代码
  1. ./test.sh
  2. 57841364my
  3. w19711382
  4. 2014138
复制代码
  1. cat i
  2. w1971128
  3. w19790903
  4. tw19980614
  5. tw1998614
  6. you20011112
  7. you200989
  8. win384562
  9. 57841364my
  10. w19711382
  11. 2014138
复制代码

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
6 [报告]
发表于 2014-07-24 18:29 |显示全部楼层
本帖最后由 Herowinter 于 2014-07-24 18:32 编辑

回复 43# 老aakk

37楼的代码不是成品吗?有什么问题?
你把i改成你的文件名就行了吧。

如果有问题,请描述你的输入是什么形式,
输出希望是什么形式。
   

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
7 [报告]
发表于 2014-07-24 19:42 |显示全部楼层
本帖最后由 Herowinter 于 2014-07-24 19:44 编辑

回复 45# 老aakk

你把37楼的代码放在一个脚本里,脚本有可执行权限
代码里面的文件名i 替换成你实际要处理的输入文件名
比如脚本名字叫test.sh,你就在命令行输入
./test.sh>输出文件名.txt
   

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
8 [报告]
发表于 2014-07-24 20:16 |显示全部楼层
我没cygwin的,而且现在我在家里用的是win8。

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
9 [报告]
发表于 2014-07-24 22:08 |显示全部楼层
回复 58# 老aakk

那你现在怎么搞的,描述一下,贴个操作图或报错信息给我们
总可以吧,难道要求我们会掐指一算 凭空把脉?
   

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
10 [报告]
发表于 2014-07-25 23:53 |显示全部楼层
回复 65# 夏未花尽
借用Shell_Hat版主的回复就是,打开ABS第310页.


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP