免费注册 查看新帖 |

Chinaunix

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

[文本处理] 比较麻烦,求助 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2013-12-10 17:32 |只看该作者
本帖最后由 T_study 于 2013-12-10 17:40 编辑

回复 2# huang6894

如果文本1后面多了几列呢
anhui     34     2
shandong  12   3
shanghai   28   4
chengshi   13        21
nongcun   9     82
和文本2
nongcun  asdf
ddfggd   anhui     
shandong
shanghai   uijd
chengshi  aaaaa
文本1中的第一列在文本二中不规则,想要得到的结果为
9  82  nongcun  asdf
34  2  ddfggd   anhui
12  3  shandong
28  4  shanghai   uijd   
13  21  chengshi  aaaaa


   

论坛徽章:
0
12 [报告]
发表于 2013-12-10 17:33 |只看该作者
本帖最后由 T_study 于 2013-12-10 17:40 编辑

回复 2# huang6894


    回复 2# huang6894

如果文本1后面多了几列呢
anhui     34     2
shandong  12   3
shanghai   28   4
chengshi   13        21
nongcun   9     82
和文本2
nongcun  asdf
ddfggd   anhui     
shandong
shanghai   uijd
chengshi  aaaaa
文本1中的第一列在文本二中不规则,想要得到的结果为
9  82  nongcun  asdf
34  2  ddfggd   anhui
12  3  shandong
28  4  shanghai   uijd
13  21  chengshi  aaaaa


   

论坛徽章:
780
金牛座
日期: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
13 [报告]
发表于 2013-12-10 17:34 |只看该作者
回复 11# T_study

为什么shanghai那一行的uijd这个字段没了?


   

论坛徽章:
0
14 [报告]
发表于 2013-12-10 17:38 |只看该作者
回复 13# Herowinter

额。。。忽略那个,就当是有的吧~~~粘贴时弄错了。。。

   

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
15 [报告]
发表于 2013-12-10 17:45 |只看该作者
本帖最后由 huang6894 于 2013-12-10 17:46 编辑

回复 12# T_study

额,比较笨的方法:
  1. [huang@~]$ cat a
  2. anhui   34      2
  3. shandong        12      3
  4. shanghai        28      4
  5. chengshi        13      21
  6. nongcun 9       82
  7. [huang@~]$ cat b
  8. nongcun  asdf
  9. ddfggd   anhui
  10. shandong
  11. shanghai   uijd
  12. chengshi  aaaaa
  13. [huang@~]$ awk 'NR==FNR{a[$1]=substr($0,index($0,$2));next}{for(i=1;i<=NF;i++)if($i in a){print a[$i]" "$0}}' a b
  14. 9       82 nongcun  asdf
  15. 34      2 ddfggd   anhui
  16. 12      3 shandong
  17. 28      4 shanghai   uijd
  18. 13      21 chengshi  aaaaa
复制代码

论坛徽章:
780
金牛座
日期: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
16 [报告]
发表于 2013-12-10 17:47 |只看该作者
  1. awk 'NR==FNR{a[$1]=$2" "$3;next}{if($1 in a)s=a[$1];else if($2 in a)s=a[$2];print s" "$1" "$2}' i1 i2

  2. 9 82 nongcun asdf
  3. 34 2 ddfggd anhui
  4. 12 3 shandong
  5. 28 4 shanghai uijd
  6. 13 21 chengshi aaaaa
复制代码
回复 12# T_study


   

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
17 [报告]
发表于 2013-12-10 17:50 |只看该作者
回复 16# Herowinter


    可是,如果它文件不知道多少列的话,总不能一个一个加吧?

论坛徽章:
780
金牛座
日期: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
18 [报告]
发表于 2013-12-10 17:54 |只看该作者
回复 17# huang6894
可以写个循环把$2到$NF拼成一个字符串吧


   

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
19 [报告]
发表于 2013-12-10 17:59 |只看该作者
本帖最后由 huang6894 于 2013-12-10 17:59 编辑

回复 18# Herowinter


    额,那我还是觉得我15楼的可以试试

论坛徽章:
780
金牛座
日期: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
20 [报告]
发表于 2013-12-10 18:03 |只看该作者
回复 19# huang6894
是的,自己拼接是比较笨的方法啦,用substr好啦,亲。

这是我自己拼的代码,看上去比较繁琐
  1. awk 'NR==FNR{for(i=2;i<=NF;i++)str=str?str" "$i:$i;a[$1]=str;str="";next}{if($1 in a)s=a[$1];else if($2 in a)s=a[$2];print s" "$1" "$2}' i1 i2

  2. 9 82 nongcun asdf
  3. 34 2 ddfggd anhui
  4. 12 3 shandong
  5. 28 4 shanghai uijd
  6. 13 21 chengshi aaaaa
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP