忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12
最近访问板块 发新帖
楼主: 乔纳斯826

[文本处理] 求shell/awk/python/perl实现数字级联效果脚本 [复制链接]

论坛徽章:
0
发表于 2017-09-13 13:32 |显示全部楼层
回复 9# yinyuemi

[root@localhost tmp]# echo '57562        57782
> 57562         57783
> 57773         57778
> 57782         57773
> 57782         57796' |awk '{a[$1][$2]}END{for(i in a){for(j in a){if(!(j in o))printf fun(i"->"j,j)}}}function fun(t,n){if(n in a){o[n];for(m in a[n]){t=t"->"m;fun(t,m);t=i"->"j}}else{o[n];print t}}'
57782->57796
57782->57773->57778
57562->57782->57796
57562->57782->57773->57778
57562->57783
[root@localhost tmp]# awk --version |head
GNU Awk 4.0.2
Copyright (C) 1989, 1991-2012 Free Software Foundation.
[root@localhost tmp]# uname -a
Linux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Wed Oct 19 11:24:13 EDT 2016 x86_64 x86_64 x86_64 GNU/Linux

[root@localhost tmp]# more /etc/redhat-release
Red Hat Enterprise Linux Server release 7.3 (Maipo)


我执行的确实有多行重复的。我再琢磨下Redhat6.5 升级awk版本,多谢大神回复!

论坛徽章:
0
发表于 2017-09-13 13:33 |显示全部楼层
回复 9# yinyuemi

[root@localhost tmp]# echo '57562        57782
> 57562         57783
> 57773         57778
> 57782         57773
> 57782         57796' |awk '{a[$1][$2]}END{for(i in a){for(j in a){if(!(j in o))printf fun(i"->"j,j)}}}function fun(t,n){if(n in a){o[n];for(m in a[n]){t=t"->"m;fun(t,m);t=i"->"j}}else{o[n];print t}}'
57782->57796
57782->57773->57778
57562->57782->57796
57562->57782->57773->57778
57562->57783
[root@localhost tmp]# awk --version |head
GNU Awk 4.0.2
Copyright (C) 1989, 1991-2012 Free Software Foundation.
[root@localhost tmp]# uname -a
Linux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Wed Oct 19 11:24:13 EDT 2016 x86_64 x86_64 x86_64 GNU/Linux

[root@localhost tmp]# more /etc/redhat-release
Red Hat Enterprise Linux Server release 7.3 (Maipo)


我执行的确实有多行重复的。我再琢磨下Redhat6.5 升级awk版本,多谢大神回复!

论坛徽章:
0
发表于 2017-09-13 13:33 |显示全部楼层
回复 9# yinyuemi

[root@localhost tmp]# echo '57562        57782
> 57562         57783
> 57773         57778
> 57782         57773
> 57782         57796' |awk '{a[$1][$2]}END{for(i in a){for(j in a){if(!(j in o))printf fun(i"->"j,j)}}}function fun(t,n){if(n in a){o[n];for(m in a[n]){t=t"->"m;fun(t,m);t=i"->"j}}else{o[n];print t}}'
57782->57796
57782->57773->57778
57562->57782->57796
57562->57782->57773->57778
57562->57783
[root@localhost tmp]# awk --version |head
GNU Awk 4.0.2
Copyright (C) 1989, 1991-2012 Free Software Foundation.
[root@localhost tmp]# uname -a
Linux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Wed Oct 19 11:24:13 EDT 2016 x86_64 x86_64 x86_64 GNU/Linux

[root@localhost tmp]# more /etc/redhat-release
Red Hat Enterprise Linux Server release 7.3 (Maipo)


我执行的确实有多行重复的。我再琢磨下Redhat6.5 升级awk版本,多谢大神回复!

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2017-09-13 15:59 |显示全部楼层
回复 13# 乔纳斯826

awk --version
GNU Awk 4.1.4
我用的版本号

论坛徽章:
27
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
发表于 2017-09-14 20:31 |显示全部楼层
本帖最后由 moperyblue 于 2017-09-15 10:22 编辑

#scala

more f1 f2
  1. ::::::::::::::
  2. f1
  3. ::::::::::::::
  4. 57562         57782
  5. 57562         57783
  6. 57773         57778
  7. 57782         57773
  8. 57782         57796
  9. ::::::::::::::
  10. f2
  11. ::::::::::::::
  12. 57562        57782
  13. 57774         57778
  14. 57783         57773
复制代码

./1.scala f1
  1. 57562->57782->57773->57778
  2. 57562->57782->57796
  3. 57562->57783
复制代码

./1.scala f2
  1. 57562->57782
  2. 57774->57778
  3. 57783->57773
复制代码

more 1.scala
  1. #!/usr/bin/env scala

  2. val bs = scala.io.Source.fromFile(args(0))
  3. val pairs = collection.mutable.ListBuffer[(String,String)]()
  4. for(x <- bs.getLines){
  5.   val Array(k,v) = x.trim.split("\\s+")
  6.   pairs += ((k,v))
  7. }
  8. bs.close()

  9. val (left,right) = pairs.unzip

  10. val keys = left.distinct.filterNot(x => right.exists(_ == x))

  11. keys foreach r

  12. def r(key: String){
  13.   def go(key: String, acc: String = key){
  14.     if (!left.exists(_ == key)) println(acc)
  15.     else pairs.collect{case (k,v) if k==key => go(v,acc+"->"+v)}
  16.   }
  17.   go(key)
  18. }
复制代码

论坛徽章:
2
技术图书徽章
日期:2013-12-17 13:52:152015亚冠之萨济拖拉机
日期:2015-07-19 11:07:52
发表于 2017-09-15 14:59 |显示全部楼层
回复 8# jason680

这个perl脚本有bug,比如如下的数据什么也打不出来


3 4
1 2
2 3
2 6
4 1

论坛徽章:
120
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07巳蛇
日期:2014-05-09 16:43:18巨蟹座
日期:2014-10-23 17:48:38子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59
发表于 2017-09-15 15:54 |显示全部楼层
回复 16# rm-rf

bug牛 起头在那?

论坛徽章:
2
技术图书徽章
日期:2013-12-17 13:52:152015亚冠之萨济拖拉机
日期:2015-07-19 11:07:52
发表于 2017-09-15 16:39 |显示全部楼层
jason680 发表于 2017-09-15 15:54
回复 16# rm-rf

bug牛 起头在那?

期望这组数据打印出

1->2->3->4->1(cycled)
2->6

论坛徽章:
120
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07巳蛇
日期:2014-05-09 16:43:18巨蟹座
日期:2014-10-23 17:48:38子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59
发表于 2017-09-15 16:51 |显示全部楼层
回复 18# rm-rf

如果你问题与楼主不同,
请再起另一帖并详细说明...

4 -> 1 -> 2 -> 3 -> 4(Cycled)
4 -> 1 -> 2 -> 6
1 -> 2 -> 3 -> 4 -> 1(Cycled)
1 -> 2 -> 6
3 -> 4 -> 1 -> 2 -> 3(Cycled)
3 -> 4 -> 1 -> 2 -> 6
2 -> 3 -> 4 -> 1 -> 2(Cycled)
2 -> 6

论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之同曦
日期:2017-09-11 14:39:48
发表于 2017-09-18 11:28 |显示全部楼层
回复 1# 乔纳斯826


  1. awk 'function w(x,y){if(length(a[x])){y=y?y"->"x:x;for(j in a[x]){w(j,y)}}else{print y"->"x;y="" }}{a[$1][$2]}END{for(i in a){w(i,"")}}' file
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP