免费注册 查看新帖 |

Chinaunix

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

[文本处理] 有没有办法,相同元素也作为不同元素处理? [复制链接]

论坛徽章:
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-02-20 10:23 |只看该作者 |倒序浏览
如题:
比如:
一般做匹配处理的时候,我们都是: awk -F"\t" 'NR==FNR{a[$3FS$2FS$4"/"$2]=$1;next}{if($1FS$2FS$3 in a){print a[$1FS$2FS$3]"\t"$0}}'  file1 file2
如果是下面的文本的话:
file1

  1. 1   chr16   2121813  GACCAGCG        G       39.73   PASS
  2. 2   chr16   2121863  GCAGGCCCCG      G       39.73   PASS
  3. 3   chrX    70331316   GCACAA  G       39.73   PASS   
  4. 4   chr16   2121813  GACCAGCG        G       39.73   PASS
  5. 5   chrX    70331316   GCACAA  G       39.73   PASS
  6. 6   chrX    70331316   GCACAA  G       39.73   PASS
复制代码
file2

  1. GACCAGCG   2121813   G/chr16    HEHEHE1
  2. GCAGGCCCCG 2121813   G/chr16    HEHEHE2
  3. GCACAA   70331316  G/chrX   HEHEHE2
  4. GACCAGCG   2121813   G/chr16    HEHEHE3
  5. GCACAA   70331316  G/chrX   HEHEHE2
  6. GCACAA   70331316  G/chrX   HEHEHE4
复制代码
如果是上面的命令,应该是得到:

  1. 1  GACCAGCG   2121813   G/chr16    HEHEHE1
  2. 2  GCAGGCCCCG 2121813   G/chr16    HEHEHE2
  3. 3  GCACAA   70331316  G/chrX   HEHEHE2
  4. 1  GACCAGCG   2121813   G/chr16    HEHEHE3
  5. 3  GCACAA   70331316  G/chrX   HEHEHE2
  6. 3  GCACAA   70331316  G/chrX   HEHEHE4
复制代码
可是我想得到的是:

  1. 1  GACCAGCG   2121813   G/chr16    HEHEHE1
  2. 2  GCAGGCCCCG 2121813   G/chr16    HEHEHE2
  3. 3  GCACAA   70331316  G/chrX   HEHEHE2
  4. 4  GACCAGCG   2121813   G/chr16    HEHEHE3
  5. 3  GCACAA   70331316  G/chrX   HEHEHE2
  6. 5  GCACAA   70331316  G/chrX   HEHEHE4
复制代码
就是最后一列不同的,我想使用第二个编号。。。。可以吗?

谢谢大神们了~

论坛徽章:
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
2 [报告]
发表于 2014-02-20 10:39 |只看该作者
回复 1# huang6894
表示没看懂需求,另外,
用你的代码和文本好像没任何输出。


   

论坛徽章:
7
亥猪
日期:2013-10-10 17:00:29辰龙
日期:2013-10-12 16:23:19卯兔
日期:2013-11-18 17:01:27金牛座
日期:2014-09-09 10:17:052015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之柏太阳神
日期:2015-09-25 13:56:42数据库技术版块每日发帖之星
日期:2016-08-06 06:20:00
3 [报告]
发表于 2014-02-20 10:49 |只看该作者
  1. awk 'NR==FNR{t=$4FS$3FS$5"/"$2;n=b[t]++;a[t,n]=$1;next}{i=$1FS$2FS$3;if(i in b){y=d[i]++;print a[i,y]FS$0}}'  file1 file2
复制代码

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
4 [报告]
发表于 2014-02-20 10:55 |只看该作者
回复 1# huang6894


try:
  1. awk -F '\t' 'NR==FNR{k=$4FS$3FS$5"/"$2;a[++b[k]k]=$1;next}{k=$1FS$2FS$3;if($NF!=c[k]){c[k]=$NF;d[k]++}if(d[k]k in a){print a[d[k]k]"\t"$0}}' file1 file2
复制代码

论坛徽章:
7
亥猪
日期:2013-10-10 17:00:29辰龙
日期:2013-10-12 16:23:19卯兔
日期:2013-11-18 17:01:27金牛座
日期:2014-09-09 10:17:052015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之柏太阳神
日期:2015-09-25 13:56:42数据库技术版块每日发帖之星
日期:2016-08-06 06:20:00
5 [报告]
发表于 2014-02-20 11:04 |只看该作者
本帖最后由 li0924 于 2014-02-20 11:37 编辑

;----

论坛徽章:
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
6 [报告]
发表于 2014-02-20 11:28 |只看该作者
本帖最后由 jason680 于 2014-02-20 11:48 编辑

回复 1# huang6894

$ awk -vs="," 'NR==FNR{k=$4s$3s"G/"$2;t=k","++c[k];a[t]=$1;next}{k=$1s$2s$3;if(x[k]==""){x[k]=$NF};t=x[k]==$NF?1:2;print a[k","t]"\t"$0}' file1 file2
1        GACCAGCG   2121813   G/chr16    HEHEHE1
        GCAGGCCCCG 2121813   G/chr16    HEHEHE2
3        GCACAA   70331316  G/chrX   HEHEHE2
4        GACCAGCG   2121813   G/chr16    HEHEHE3
3        GCACAA   70331316  G/chrX   HEHEHE2
5        GCACAA   70331316  G/chrX   HEHEHE4

Note: your file data can not match number 2
BTW, It's hard to know what you say   

论坛徽章:
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
7 [报告]
发表于 2014-02-20 13:33 |只看该作者
@Herowinter@jason680谢谢两位大神,额。。数据是我乱写的,有错也不奇怪,不好意思啊,给你们添麻烦了。
意思就是说,以一个文本的其中几列建立哈希去匹配另外的一个文本,如果第二个文本存在多行符合匹配,如果该行相同,输出相同的value,如果存在不同的话,输出不同的指向value。。。

论坛徽章:
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-02-20 13:33 |只看该作者
@li0924@li0924谢谢两位大神,我好好研究下

论坛徽章:
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
9 [报告]
发表于 2014-02-20 13:38 |只看该作者
  1. $ awk 'NR==FNR{a[$4,++b[$4]]=$1;next}{if(!c[$1$4]++)d[$1$4]=++e[$1];print a[$1,d[$1$4]]"\t"$0}' a b
  2. 1       GACCAGCG        2121813 G/chr16 HEHEHE1
  3. 2       GCAGGCCCCG      2121813 G/chr16 HEHEHE2
  4. 3       GCACAA  70331316        G/chrX  HEHEHE2
  5. 4       GACCAGCG        2121813 G/chr16 HEHEHE3
  6. 3       GCACAA  70331316        G/chrX  HEHEHE2
  7. 5       GCACAA  70331316        G/chrX  HEHEHE4
复制代码

论坛徽章:
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-02-20 14:03 |只看该作者
回复 9# yestreenstars


    谢谢星辰大大
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP