免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6116 | 回复: 8

[求助]找到某两列刚好顺序相反一组数据 [复制链接]

论坛徽章:
0
发表于 2018-05-06 13:12 |显示全部楼层
数据格式如下:
1 E00548:177:HKH53CCXY:4:1101:10003:10029 TACAGACTGTGG    CTCTCCTATAGC    chr2    184106244       184106312
2 E00548:177:HKH53CCXY:4:1101:10003:10099 TGATACCGGACA    GTGCCTCATCTA    chr3    139790591       139790643
3 E00548:177:HKH53CCXY:4:1101:10003:10099 TGATACCGGACA    GTGCCTCATCTA    chr3    139790643       139790591
4 E00548:177:HKH53CCXY:4:1101:10003:10169 CTTCCATAGGCA    AGAGTTCACGGA    chr6    26713971        26713996
5 E00548:177:HKH53CCXY:4:1101:10003:10169 CTTCCATAGGCA    AGAGTTCACGGA    chr6    26713996        26713971
6 E00548:177:HKH53CCXY:4:1101:10003:10240 TAGACGTAGACG    TCAAGGAGAACC    chr14   37255539        37255588
7 E00548:177:HKH53CCXY:4:1101:10003:10240 TCAAGGAGAACC    TAGACGTAGACG    chr14   37255588        37255539
8 E00548:177:HKH53CCXY:4:1101:10003:15795 ACGACACTGCTA    CTCTCCTATAGC    chr14   96799778        96799778
9 E00548:177:HKH53CCXY:4:1101:10003:10029 CTCTCCTATAGC    TACAGACTGTGG    chr2    184106312       184106244
10 E00548:177:HKH53CCXY:4:1101:10003:15865 CTCTCCTATAGC    TGATACCGGACA    chr1    235974675       235974675
11 E00548:177:HKH53CCXY:4:1101:10003:15900 TACAGACTGTGG    CAAGCAACCGAT    chr5    112051485       112051747
12 E00548:177:HKH53CCXY:4:1101:10003:15900 TACAGACTGTGG    CAAGCAACCGAT    chr5    112051747       112051485
13 E00548:177:HKH53CCXY:4:1101:10003:17272 AGCGGATGAGTA    AGCGGATGAGTA    chr15   80282260        80282316
14 E00548:177:HKH53CCXY:4:1101:10003:17272 AGCGGATGAGTA    AGCGGATGAGTA    chr15   80282316        80282260
15 E00548:177:HKH53CCXY:4:1101:10003:17307 ACAGTGGCATGT    ATGCGTACCACA    chr1    243686846       699370


(第一列的序号是自己加的,原文件中没有)
比如第6、7行,他们的第2、3列顺序相反,第5、6列顺序也刚好相反,其余的字段内容相同
以及第1、9行,也是第2、3列顺序相反,第5、6列顺序也刚好相反,其余的字段内容相同

现在想要把这种成对的两行输出到一个文件,例如上述数据的输出结果应该是:
E00548:177:HKH53CCXY:4:1101:10003:10029 TACAGACTGTGG    CTCTCCTATAGC    chr2    184106244       184106312
E00548:177:HKH53CCXY:4:1101:10003:10029 CTCTCCTATAGC    TACAGACTGTGG    chr2    184106312       184106244
E00548:177:HKH53CCXY:4:1101:10003:10240 TAGACGTAGACG    TCAAGGAGAACC    chr14   37255539        37255588
E00548:177:HKH53CCXY:4:1101:10003:10240 TCAAGGAGAACC    TAGACGTAGACG    chr14   37255588        37255539



请问该怎么找出像这样满足条件的数据?可以帮我提供个思路嘛?

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2018-05-07 15:28 |显示全部楼层
回复 1# elaine2017

# [ /home/soio/1bs/awks ] {2018-05-07 12:15:59}
: 1525666559:0;➜  awk 'a[$6]==$7;$6 ~ /6312$|5539$/;$7 ~ /6312$|5539$/{print}' 5665-k
1 E00548:177:HKH53CCXY:4:1101:10003:10029 TACAGACTGTGG    CTCTCCTATAGC    chr2    184106244       184106312
6 E00548:177:HKH53CCXY:4:1101:10003:10240 TAGACGTAGACG    TCAAGGAGAACC    chr14   37255539        37255588
7 E00548:177:HKH53CCXY:4:1101:10003:10240 TCAAGGAGAACC    TAGACGTAGACG    chr14   37255588        37255539
9 E00548:177:HKH53CCXY:4:1101:10003:10029 CTCTCCTATAGC    TACAGACTGTGG    chr2    184106312       184106244


论坛徽章:
0
发表于 2018-05-07 16:10 |显示全部楼层
回复 2# 1cpuer

数据很大,用awk的效率很低吧

论坛徽章:
0
发表于 2018-05-07 16:15 |显示全部楼层
本帖最后由 elaine2017 于 2018-05-07 16:17 编辑

回复 2# 1cpuer

我试了你这个命令,并没有过滤掉啊

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2018-05-07 19:39 |显示全部楼层
回复 4# elaine2017

# [ /home/soio/1bs/awks ] {2018-05-07 19:37:03}
: 1525693023:0;➜  grep '184106\|372555' 5665-k               
1 E00548:177:HKH53CCXY:4:1101:10003:10029 TACAGACTGTGG    CTCTCCTATAGC    chr2    184106244       184106312
6 E00548:177:HKH53CCXY:4:1101:10003:10240 TAGACGTAGACG    TCAAGGAGAACC    chr14   37255539        37255588
7 E00548:177:HKH53CCXY:4:1101:10003:10240 TCAAGGAGAACC    TAGACGTAGACG    chr14   37255588        37255539
9 E00548:177:HKH53CCXY:4:1101:10003:10029 CTCTCCTATAGC    TACAGACTGTGG    chr2    184106312       184106244


论坛徽章:
0
发表于 2018-05-07 20:02 |显示全部楼层
回复 5# 1cpuer

78G的数据,用grep?运行不出来的吧。。。。

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2018-05-08 14:17 |显示全部楼层
本帖最后由 1cpuer 于 2018-05-09 14:33 编辑

回复 6# elaine2017

可以的
grep `awk 打印 1行 $7 ` > anfile
wc -l anfile && if == 2 (cat > towfile)

# [ /home/soio/1bs/awks ] {2018-05-09 14:26:59}
: 1525847219:0;➜  grep `awk '{print $7}' 5665-k | sed -n 1p` 5665-k
1 E00548:177:HKH53CCXY:4:1101:10003:10029 TACAGACTGTGG    CTCTCCTATAGC    chr2    184106244       184106312
9 E00548:177:HKH53CCXY:4:1101:10003:10029 CTCTCCTATAGC    TACAGACTGTGG    chr2    184106312       184106244


# [ /home/soio/1bs/awks ] {2018-05-09 14:27:54}
: 1525847274:0;➜  grep `awk '{print $7}' 5665-k | sed -n 2p` 5665-k
2 E00548:177:HKH53CCXY:4:1101:10003:10099 TGATACCGGACA    GTGCCTCATCTA    chr3    139790591       139790643
3 E00548:177:HKH53CCXY:4:1101:10003:10099 TGATACCGGACA    GTGCCTCATCTA    chr3    139790643       139790591


# [ /home/soio/1bs/awks ] {2018-05-09 14:28:26}
: 1525847306:0;➜  grep `awk '{print $7}' 5665-k | sed -n 6p` 5665-k
6 E00548:177:HKH53CCXY:4:1101:10003:10240 TAGACGTAGACG    TCAAGGAGAACC    chr14   37255539        37255588
7 E00548:177:HKH53CCXY:4:1101:10003:10240 TCAAGGAGAACC    TAGACGTAGACG    chr14   37255588        37255539

失败

论坛徽章:
0
发表于 2018-05-09 11:41 |显示全部楼层
78G这么大的数据,不可能把全部数据先加载,再比较;
建议通过多次文件扫描来处理:
1. 先合并1,4列相同的到同一新文件
目的:
是减少第2步查找比较的次数,并能在有限内存中处理
问题:
如果1,4列相同的行数据太少,生成文件方式,会产生太多文件;可以直接使用缓存处理;
只有1,4列相同的行数可能会很多时,缓存会占用大量内存时,才使用中间文件方式

2. 在新文件中,从第一行开始,查找之后行中:第2、3列顺序相反,第5、6列顺序也刚好相反的两行

3. 把符合要求的行输出到结果文件

评分

参与人数 1信誉积分 +5 收起 理由
elaine2017 + 5 很给力!

查看全部评分

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2018-05-23 17:18 |显示全部楼层
本帖最后由 1cpuer 于 2018-05-23 17:37 编辑

回复 6# elaine2017

# [ /home/soio/1bs/awks ] {2018-05-23 17:16:48}
: 1527067008:0;➜  awk '{print $3" "$6" "$1}{print $4" "$7" "$1}' 13.kf | awk '{a[$1" "$2]=a[$1" "$2]?a[$1" "$2]"!@#$"$3 : $0}END{for(i in a) print a}' | grep -o '[0-9][0-9]*!@#$[0-9][0-9]*'                              
13!@#$14
1!@#$9
1!@#$9
13!@#$14
6!@#$7
6!@#$7


# [ /home/soio/1bs/awks ] {2018-05-23 17:16:58}
: 1527067018:0;➜  sed -n '1p;9p;6p;7p;13p;14p' 13.kf
1 E00548:177:HKH53CCXY:4:1101:10003:10029 TACAGACTGTGG    CTCTCCTATAGC    chr2    184106244       184106312
6 E00548:177:HKH53CCXY:4:1101:10003:10240 TAGACGTAGACG    TCAAGGAGAACC    chr14   37255539        37255588
7 E00548:177:HKH53CCXY:4:1101:10003:10240 TCAAGGAGAACC    TAGACGTAGACG    chr14   37255588        37255539
9 E00548:177:HKH53CCXY:4:1101:10003:10029 CTCTCCTATAGC    TACAGACTGTGG    chr2    184106312       184106244
13 E00548:177:HKH53CCXY:4:1101:10003:17272 AGCGGATGAGTA    AGCGGATGAGTA    chr15   80282260        80282316
14 E00548:177:HKH53CCXY:4:1101:10003:17272 AGCGGATGAGTA    AGCGGATGAGTA    chr15   80282316        80282260





# [ /home/soio/1bs/awks ] {2018-05-23 17:36:00}
: 1527068160:0;➜  awk '{print $3" "$6" "$1}{print $4" "$7" "$1}' 13.kf | awk '{a[$1" "$2]=a[$1" "$2]?a[$1" "$2]"!@#$"$3 : $0}END{for(i in a) print a}' | grep -o '[0-9][0-9]*!@#$[0-9][0-9]*' | sort -nk 1 | sed 's/\!\@\#\$/p;/ ;s/$/p;/' | sed 's/;/&\n/' | awk '!a[$0]++' | sed ':1;N;s/\n//;t1'
1p;9p;6p;7p;13p;14p;

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP