免费注册 查看新帖 |

Chinaunix

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

[文本处理] AWK怎么处理三个文件 [复制链接]

论坛徽章:
2
操作系统版块每日发帖之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之八一
日期:2016-05-18 15:38:22
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-10-26 17:01 |只看该作者 |倒序浏览
本帖最后由 287380917 于 2016-10-26 17:03 编辑

我现在有三个文件,省、市、县各有一个文件分别为:
sheng.txt
1 北京市
2 天津市
3 河北省
4 山西省
5 内蒙古自治区
6 辽宁省
7 吉林省
8 黑龙江省

shi.txt
1 北京市 1
2 天津市 2
3 石家庄市 3
4 唐山市 3
5 秦皇岛市 3
6 邯郸市 3
7 邢台市 3
8 保定市 3
9 张家口市 3
10 承德市 3

xian.txt
1 东城区 1
2 西城区 1
3 崇文区 1
4 宣武区 1
5 朝阳区 1
6 丰台区 1
7 石景山区 1
8 海淀区 1
9 门头沟区 1
10 房山区 1

怎么样处理这3个文件最后形成一个文件:
1,北京市,北京市,北京市
2,北京市,北京市,东城区
3,北京市,北京市,西城区
……
N,河北省,石家庄市,石家庄市
……
M,河北省,保定市,保定市
……

最后的文件格式就是序号,省,市,县。省的话就是序号,省,省,省;市的话就是序号,省,市,市;县区的话就是序号,省,市,县区。
这个序号就是1往后递增。


补充说明下:省市县的三个文件没有完全列出来,格式是保持一致的。市的第三段对应的就是省的序号,县市的第三段对应的就是市的序号

论坛徽章:
28
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
2 [报告]
发表于 2016-10-26 17:33 |只看该作者

  1. join -13 -23 -a1 -o 1.1 1.2 2.2 <(join -11 -23 -a1 -o 1.2 2.2 2.3 sheng.txt shi.txt) xian.txt|cat -n
复制代码

?

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期: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未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
3 [报告]
发表于 2016-10-27 08:00 |只看该作者
本帖最后由 jason680 于 2016-10-27 08:13 编辑

回复 1# 287380917

$ bash get_ssx.sh | column -t
北京市        北京市        北京市
北京市        北京市        东城区
北京市        北京市        西城区
北京市        北京市        崇文区
北京市        北京市        宣武区
北京市        北京市        朝阳区
北京市        北京市        丰台区
北京市        北京市        石景山区
北京市        北京市        海淀区
北京市        北京市        门头沟区
北京市        北京市        房山区
天津市        天津市        天津市
河北省        河北省        河北省
河北省        石家庄市      石家庄市
河北省        唐山市        唐山市
河北省        秦皇岛市      秦皇岛市
河北省        邯郸市        邯郸市
河北省        邢台市        邢台市
河北省        保定市        保定市
河北省        张家口市      张家口市
河北省        承德市        承德市
山西省        山西省        山西省
内蒙古自治区  内蒙古自治区  内蒙古自治区
辽宁省        辽宁省        辽宁省
吉林省        吉林省        吉林省


$ cat get_ssx.sh
awk '
function chk(){
  while((m1-n1)*1000+m2-n2>=0){
    if(!d[n1]++)
      print a[1,n1],a[1,n1],a[1,n1];
    if(!d[n1,n2]++)
      if(a[2,n2]!=""&&a[1,n1]!=a[2,n2])
        print a[1,n1],a[2,n2],a[2,n2];
    if(n2 > c[2])++n1;
    if(b[2,++n2] > n1){
      ++n1;
    }
  }
}
function x(){
  if(b[3,m3])m2=b[3,m3];
  if(b[2,m2])m1=b[2,m2];
  chk();
  print a[1,m1],a[2,m2],a[3,m3]
}
{
  k=ARGIND;
  a[k,$1]=$2;
  b[k,$1]=$3;
  c[k]=FNR
}
END{
  n1=1;
  for(m3=1;m3<=c[3];++m3)
    x();
  m1=c[1];
  m2=c[2];
  chk();
}' sheng.txt shi.txt xian.txt

$ grep . sheng.txt shi.txt xian.txt
sheng.txt:1 北京市
sheng.txt:2 天津市
sheng.txt:3 河北省
sheng.txt:4 山西省
sheng.txt:5 内蒙古自治区
sheng.txt:6 辽宁省
sheng.txt:7 吉林省
sheng.txt:8 黑龙江省
shi.txt:1 北京市 1
shi.txt:2 天津市 2
shi.txt:3 石家庄市 3
shi.txt:4 唐山市 3
shi.txt:5 秦皇岛市 3
shi.txt:6 邯郸市 3
shi.txt:7 邢台市 3
shi.txt:8 保定市 3
shi.txt:9 张家口市 3
shi.txt:10 承德市 3
xian.txt:1 东城区 1
xian.txt:2 西城区 1
xian.txt:3 崇文区 1
xian.txt:4 宣武区 1
xian.txt:5 朝阳区 1
xian.txt:6 丰台区 1
xian.txt:7 石景山区 1
xian.txt:8 海淀区 1
xian.txt:9 门头沟区 1
xian.txt:10 房山区 1

论坛徽章:
2
操作系统版块每日发帖之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之八一
日期:2016-05-18 15:38:22
4 [报告]
发表于 2016-10-27 10:38 |只看该作者
感谢2楼3楼的朋友哈。
我文件贴的不全,最后跑出来的结果好像不太对。
用shell我搞不定,改用数据库解决问题了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP