免费注册 查看新帖 |

Chinaunix

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

[文本处理] 数据整理排版! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-09-11 15:03 |只看该作者 |倒序浏览
本帖最后由 c2-linux 于 2013-09-11 15:12 编辑

大家好:
第一次发帖求助,谢谢帮助~
  1. [c2@linux c2]$ ls
  2. 11111  cc
  3. [c2@linux c2]$ more 11111
  4. 612     10710   CLK300  9       x1x1x111        2013/9/9        19:30
  5. 408     10711   TEW900  9       11x1x111        2013/9/8        10:01
  6. 652     10710   WQL100  9       81x11x11        2013/9/7        10:30
  7. 602     10711   TPT100  9       11111x11        2013/9/6        23:02
  8. 702     10710   WSD120  8       18x888xx        2013/9/6        12:40
  9. 808     10710   WSP229  8       11111xxx        2013/9/6        4:50
  10. 922     10711   HYY472  8       11x111x1        2013/9/5        17:02
  11. 133     10710   RTD861  7       11111112        2013/9/5        4:02
  12. 448     10711   OPH522  7       111x1x11        2013/9/4        17:10
  13. 428     10711   EPH512  7       11111111        2013/9/4        11:04
  14. 148     12711   TPH523  7       11x11111        2013/9/4        19:20
  15. 348     13711   TQH522  7       11x111x1        2013/9/3        11:40
  16. 448     12311   TPD521  7       11x111x1        2013/9/3        10:01
  17. [c2@linux c2]$ more cc
  18. 10710   2013/9/6        11:00
  19. 10711   2013/9/7        12:00
复制代码
我想做以下动作:
1.   以cc文件的每行为选项,在11111文件中搜索对应行,例:
  1. [c2@linux c2]$ cat 11111 |grep 10710
  2. 612     10710   CLK300  9       x1x1x111        2013/9/9        19:30
  3. 652     10710   WQL100  9       81x11x11        2013/9/7        10:30
  4. 702     10710   WSD120  8       18x888xx        2013/9/6        12:40
  5. 808     10710   WSP229  8       11111xxx        2013/9/6        4:50
  6. 133     10710   RTD861  7       11111112        2013/9/5        4:02
复制代码
再选出在cc文件中10710的第2、3列时间前后的两行。如:
  1. 702     10710   WSD120  8       18x888xx        2013/9/6        12:40
  2. 808     10710   WSP229  8       11111xxx        2013/9/6        4:50
复制代码
再比较这两行中的第5列,时间点前的”x“的位置 是否在时间点后继续出现,如果有则记录出现个数,将次数可以写在cc对应行后面。(一定要是对应的。如果不出现,则记录0)

谢谢各位指导,现在没头绪。

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
2 [报告]
发表于 2013-09-11 15:38 |只看该作者
回复 1# c2-linux


再选出在cc文件中10710的第2、3列时间前后的两行。如:
702     10710   WSD120  8       18x888xx        2013/9/6        12:40
808     10710   WSP229  8       11111xxx        2013/9/6        4:50

#什么叫 “前后的两行”? 以什么样的规则 得到的这两行实体数据,请说明详情


再比较这两行中的第5列,时间点前的”x“的位置 是否在时间点后继续出现,如果有则记录出现个数,将次数可以写在cc对应行后面。(一定要是对应的。如果不出现,则记录0)

#这一段就完全不知道你在说什么了, 请把你想要的结果列出来  

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
3 [报告]
发表于 2013-09-11 16:02 |只看该作者
没看懂你的意图,不知道下手

论坛徽章:
0
4 [报告]
发表于 2013-09-11 16:14 |只看该作者
本帖最后由 c2-linux 于 2013-09-11 16:22 编辑

回复 2# 关阴月飞





如10711应该比较的是下面的两行:

论坛徽章:
0
5 [报告]
发表于 2013-09-11 16:25 |只看该作者

不知道有没有人看懂,比较复杂,我也晕。

论坛徽章:
0
6 [报告]
发表于 2013-09-11 20:36 |只看该作者

各位老师帮我看看。

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
7 [报告]
发表于 2013-09-11 20:59 |只看该作者
是不是这个意思:
cc文件第一行的第一列是10710,第二第三列是时间A
在1111文件找出第二列是10710的所有行,再在这些行中取离时间A最近的一前一后后的两个时间所在的行。

是吗?

接下去就没看懂,最后一张图,框出来的两行都有x,为什么结果是0

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
8 [报告]
发表于 2013-09-11 21:06 |只看该作者
本帖最后由 yinyuemi 于 2013-09-11 21:07 编辑

回复 6# c2-linux


蒙一个
  1. awk '
  2. NR==FNR{a[$1]=gensub(/\/|:/,"","g",$2$3);c[$1]=$0;next}
  3. {b[$5]++;if($2 in a){
  4. if(gensub(/\/|:/,"","g",$6$7)<a[$2]){
  5. print b[$2],b[$5]-1
  6. delete a[$2];
  7. }
  8. }
  9. }
  10. ' cc 1111
复制代码

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
9 [报告]
发表于 2013-09-11 21:11 |只看该作者
本帖最后由 cao627 于 2013-09-11 21:13 编辑

是不是用如上方式取出两行数据后,看这两行数据的第五列上,“x”这个字符(将第五列作为一个字符串)是否有相同索引(字符在字符串中从左往右数过去,处于第个字符)?
@c2-linux

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
10 [报告]
发表于 2013-09-11 21:59 |只看该作者
本帖最后由 liion631818 于 2013-09-11 22:08 编辑

好慢的

  1. #!/bin/bash

  2. exec 3<2.txt
  3. while read -u 3 line; do
  4.         arr=( $line )
  5.         grep ${arr[0]} 1.txt | sort -k6,6 -k7n,7n >tmp.txt
  6.         seconds=`date -d "${arr[1]} ${arr[2]}" +%s`
  7.         lastline=""
  8.         while read tmp; do
  9.                 if [[ -z "$lastline" ]]; then
  10.                         lastline="$tmp"
  11.                 fi
  12.                 cnt=0
  13.                 set -- $tmp
  14.                 target=`date -d "$6 $7" +%s`
  15.                 if [[ $seconds < $target ]]; then
  16.                         arr2=( $lastline )
  17.                         compare=${arr2[4]}
  18.                         for((i=0;i<${#5};i++)); do
  19.                                
  20.                                 if [[ ${5:i:1} == "x" && ${5:i:1} == ${compare:i:1} ]]; then
  21.                                         (( cnt++ ))
  22.                                 fi
  23.                         done
  24.                         echo ${cnt} ${line}   
  25.                         break
  26.                 fi
  27.                 lastline="$tmp"
  28.         done <tmp.txt
  29. done
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP