免费注册 查看新帖 |

Chinaunix

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

[文本处理] 怎么批量对应替换列数据 [复制链接]

论坛徽章:
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
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-03-26 13:37 |只看该作者 |倒序浏览
两个文本,怎么把第一个文本的最后27列根据第二第三列的关键词替换成对应的第二个文本的后27列?

比如:
文本1 :
  1. hahh       rrr       fff       rrr       1       2       3       4       5       6       7       8       9       10      11      12      13      14      15      16      17      18      19      20  21       22      23      24      25      26      27
  2. hh       rrr       fff       rrr       44      45      46      47      48      49      50      51      52      53      54      55      56      57      58      59      60      61      62      63  64       65      66      67      68      69      70
  3. hpph       rpptrr       ffpf       rrrr      74      75      76      77      78      79      80      81      82      83      84      85      86      87      88      89      90      91      92      93  94       95      96      97      98      99      100
  4. hpph       rprr       ffpf       rrrr      154     155     156     157     158     159     160     161     162     163     164     165     166     167     168     169     170     171     172     173 174      175     176     177     178     179     180
复制代码
文本2:
  1. rrr       fff  154     155     156     157     158     159     160     161     162     163     164     165     166     167     168     169     170     171     172     173 174      175     176     177     178     179     180
  2. rprr       ffpf  74      75      76      77      78      79      80      81      82      83      84      85      86      87      88      89      90      91      92      93  94       95      96      97      98      99      100
复制代码
最后得到
  1. hahh       rrr       fff       rrr      154     155     156     157     158     159     160     161     162     163     164     165     166     167     168     169     170     171     172     173 174      175     176     177     178     179     180
  2. hahh       rrr       fff       rrr      154     155     156     157     158     159     160     161     162     163     164     165     166     167     168     169     170     171     172     173 174      175     176     177     178     179     180
  3. hpph       rpptrr       ffpf       rrrr      74      75      76      77      78      79      80      81      82      83      84      85      86      87      88      89      90      91      92      93  94       95      96      97      98      99      100
  4. hpph       rprr       ffpf       rrrr      154     155     156     157     158     159     160     161     162     163     164     165     166     167     168     169     170     171     172     173 174      175     176     177     178     179     180
复制代码
如果用awk的话,是不是只能手动一个一个的输
awk -F"\t" 'NR==FNR{a[$2FS$3]=$1"\t"$2"\t"$3"\t"$4;next}{if($1FS$2 in a){print  a[$1fs$2]"\t"$3"\t"$4"\t"$5"\t"$6"\t"$7...........................;}else{print $0}}' 呀?

还有就是,文本一并不是只有测试数据显示的31列,而是110列,也就是说,后面的27列替换成对应的文本2,但是前面的83列是不能变的。。。

论坛徽章:
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
2 [报告]
发表于 2014-03-26 13:54 |只看该作者
sorry...上面的代码是错的。。。
  1. awk -F"\t" 'NR==FNR{a[$1FS$2]=$3"\t"$4"\t"$5"\t"$6"\t"$7...........................;next}{if($2FS$3 in a){print  $1"\t"$2"\t"$3"\t"$4"\t"a[$2fs$3]}else{print $0}}'
复制代码

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
3 [报告]
发表于 2014-03-26 14:32 |只看该作者
回复 1# huang6894


    好像前两天有看到一样的问题,楼主搜索看看能不能找到。

论坛徽章:
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
4 [报告]
发表于 2014-03-26 14:33 |只看该作者
  1. awk 'NR==FNR{a[$1$2]=gensub(/^(\S+\s+){2}/,"",1);next}$2$3 in a{NF=NF-27;print $0,a[$2$3];next}1' 2.txt 1.txt
复制代码
PS:  awk 4.1.0 版本

论坛徽章:
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
5 [报告]
发表于 2014-03-26 14:38 |只看该作者
回复 1# huang6894

$ awk -vt=27 'NR==FNR&&NF>t+1{s="";for(n=NF-t;n<=NF;n++)s=s"\t"$n;a[$1,$2]=s;next}NF>t+1{s="";for(n=1;n<NF-t;n++)s=s$n"\t";s=s$n;print s,a[$2,$3]}' f2 f1
hh        rrr        fff        rrr         fff        154        155        156        157        158        159        160        161        162        163        164        165        166        167        168        169        170        171        172        173        174        175        176        177        178        179        180
hh        rrr        fff        rrr         fff        154        155        156        157        158        159        160        161        162        163        164        165        166        167        168        169        170        171        172        173        174        175        176        177        178        179        180
hpph        rpptrr        ffpf        rrrr
hpph        rprr        ffpf        rrrr         ffpf        74        75        76        77        78        79        80        81        82        83        84        85        86        87        88        89        90        91        92        93        94        95        96        97        98        99        100

论坛徽章:
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
6 [报告]
发表于 2014-03-26 15:22 |只看该作者
@seesea2517@reyleon@jason680非常感谢三位,谢谢

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
7 [报告]
发表于 2014-03-26 16:50 |只看该作者
  1. $ awk -vOFS='\t' 'NR==FNR{for(i=NF-27;i++<NF;)a[$1,$2]=a[$1,$2]"\t"$i;next}{NF-=27;print $0a[$2,$3]}' b a
  2. hahh    rrr     fff     rrr     154     155     156     157     158     159     160     161     162     163     164     165     166  167      168     169     170     171     172     173     174     175     176     177     178     179     180
  3. hh      rrr     fff     rrr     154     155     156     157     158     159     160     161     162     163     164     165     166  167      168     169     170     171     172     173     174     175     176     177     178     179     180
  4. hpph    rpptrr  ffpf    rrrr
  5. hpph    rprr    ffpf    rrrr    74      75      76      77      78      79      80      81      82      83      84      85      86   87       88      89      90      91      92      93      94      95      96      97      98      99      100
复制代码

论坛徽章:
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
8 [报告]
发表于 2014-03-26 16:52 |只看该作者
回复 7# yestreenstars


    O(∩_∩)O谢谢

论坛徽章:
3
水瓶座
日期:2014-02-20 12:02:14天蝎座
日期:2014-03-19 14:04:46水瓶座
日期:2014-07-26 20:01:02
9 [报告]
发表于 2014-03-28 12:14 |只看该作者
awk 'FNR==NR{t=$1 OFS $2;$1="";$2="";a[t]=$0;next}{t2=$2 OFS $3;if( a[t2] != "" ) print $1 OFS $2 OFS $3 OFS $4 a[t2];else print $0}' file1 file2

论坛徽章:
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
10 [报告]
发表于 2014-03-28 13:39 |只看该作者
回复 9# haokoo


    O(∩_∩)O谢谢大神
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP