免费注册 查看新帖 |

Chinaunix

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

[文本处理] awk两个文本比较 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-04-02 08:23 |只看该作者 |倒序浏览
各位大神小女子又有一事请教,还是两个文本比较,这次我需要用file1中的索引删除file2对应的列

file1 文件长度不一,范围为1-13
3
5
7

file2 3行26列数组

0 0 3.2 4.3 5.3 ... -4.5
0 0 1.2 -9.1 -7.4   ...  6.7
0 0 7.8 -8.2 0.2 ... 6.4

如此例file1里有3,5,7,那我希望删除file2的3,5,7列
我的想法是把file1放在数组里,然后我想知道怎么匹配$3,$5,$7当我执行第二个文件的时候

awk 'NR==FNR {for(i=1;i<=NR;i++){a[i]=$1;next}} NR>FNR{for(k in a){$a[k]=null; print $0}}' file1 file2

这里的$a[k]我是希望把a数组中存储的index 3,5,7读出来,然后让file2识别为第三到第七列这样$3,$5,$7;但我这样的表达式错误的,怎么办啊大神们,求各位不吝赐教!!!!

论坛徽章:
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
2 [报告]
发表于 2016-04-02 10:07 |只看该作者
awk 'NR==FNR {a[$1];next}{for(k in a){$k=null}}1' file file1

论坛徽章:
0
3 [报告]
发表于 2016-04-05 02:56 |只看该作者
回复 3# 时时20160307
大神你太强了,感激不尽,但是问题是删除的部分就会多出来空格,这样的空格有办法删掉么?我试着用null代替空格,不对,请大神不吝赐教!!!感激不尽


   

论坛徽章:
0
4 [报告]
发表于 2016-04-05 03:32 |只看该作者
回复 3# 时时20160307

换成undef也没用啊,我看了一下perl的语法 求助


   

论坛徽章:
0
5 [报告]
发表于 2016-04-05 03:39 |只看该作者
回复 3# 时时20160307

我用sed ‘s/  */ /g’通道可以正确输出,但我知道perl肯定可以直接输出没有空格的结果,大神教我一下好不好,感激不尽


   

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
6 [报告]
发表于 2016-04-05 08:44 |只看该作者
回复 4# shrimpj


    你是要用null 代替就null 加上双引号, null -> "null"
    如果是不要留出空格之类的, 即比如原来是有26列, 然后你要删除这3列后变成23列,试试
  1. awk 'NR==FNR{a[$1]++;next}{for(i=1;i<=NF;++i)if(!a[$i])printf $i FS;print ""}' file1 file2
复制代码

论坛徽章:
5
数据库技术版块每日发帖之星
日期:2015-08-01 06:20:00数据库技术版块每日发帖之星
日期:2015-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-01-11 06:20:00数据库技术版块每日发帖之星
日期:2016-01-22 06:20:00程序设计版块每日发帖之星
日期:2016-05-09 06:20:00
7 [报告]
发表于 2016-05-05 10:24 |只看该作者
本帖最后由 toddhai 于 2016-05-05 14:28 编辑

回复 7# elu_ligao
  1. if(!a[$i])应该改成if(!a[i])吧
复制代码

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
8 [报告]
发表于 2016-05-05 11:32 |只看该作者
回复 9# toddhai
  1.    谢谢指点, 应该是!a[i], 多了个$
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP