UNIX完全外部联接会创建重复的条目项,尽管顺序正确?会不会是那些不成对的东西造成了混乱?
我有两个文件,我想根据它们的第一列连接它们 它们是经过排序的,并且并非FILE1中第一列中的所有值都在FILE2中,反之亦然 FILE1.TXT看起来像这样,只是大约有15k行:UNIX完全外部联接会创建重复的条目项,尽管顺序正确?会不会是那些不成对的东西造成了混乱?,unix,join,left-join,bioinformatics,outer-join,Unix,Join,Left Join,Bioinformatics,Outer Join,我有两个文件,我想根据它们的第一列连接它们 它们是经过排序的,并且并非FILE1中第一列中的所有值都在FILE2中,反之亦然 FILE1.TXT看起来像这样,只是大约有15k行: snRNA:7SK 1037 snRNA:U11 144 snRNA:U1:21D 348.293 snRNA:U12:73B 16 snRNA:U1:82Eb 2.14286 snRNA:U1:95Ca 348.293 snRNA:U1:95Cb 351.96 snRNA:U1:95Cc
snRNA:7SK 1037
snRNA:U11 144
snRNA:U1:21D 348.293
snRNA:U12:73B 16
snRNA:U1:82Eb 2.14286
snRNA:U1:95Ca 348.293
snRNA:U1:95Cb 351.96
snRNA:U1:95Cc 35.5095
snRNA:U2:14B 447.35
snRNA:U2:34ABa 459.75
snRNA:U2:34ABb 513.25
snRNA:U2:34ABc 509
snRNA:U2:38ABa 443.65
snRNA:U4:38AB 155
snRNA:U4:39B 611.833
snRNA:U4atac:82E 152.5
snRNA:U5:14B 1
snRNA:U5:23D 2.5
snRNA:U5:34A 11
snRNA:U5:38ABb 2.5
snRNA:U5:63BC 44
snRNA:U6:96Aa 18
snRNA:U6:96Ab 9.5
snRNA:U6:96Ac 8.5
snRNA:U7 4
snRNA:U8 8
FILE2.TXT如下所示,它也是~15K行:
snRNA:7SK 1259
snRNA:U11 33
snRNA:U1:21D 1480.57
snRNA:U12:73B 4
snRNA:U1:82Eb 10.2
snRNA:U1:95Ca 1480.57
snRNA:U1:95Cb 1484.03
snRNA:U1:95Cc 114.633
snRNA:U2:14B 4678.89
snRNA:U2:34ABa 4789.93
snRNA:U2:34ABb 5292.22
snRNA:U2:34ABc 5273.23
snRNA:U2:38ABa 4557.88
snRNA:U2:38ABb 3.75
snRNA:U4:38AB 405
snRNA:U4:39B 1503.5
snRNA:U4atac:82E 548
snRNA:U5:14B 25
snRNA:U5:23D 19
snRNA:U5:34A 32
snRNA:U5:38ABb 4
snRNA:U5:63BC 742
snRNA:U6:96Aa 39.5
snRNA:U6:96Ab 1
snRNA:U6:96Ac 1
snRNA:U7 11
如您所见,FILE1中缺少FILE2中的元素(snRNA:U5:38ABb),FILE2中缺少FILE1中的元素。在整个文件中,无论是在两个方向还是多次,都是这样
我写命令如下:
join -a1 -a2 -e "0" -1 1 -2 1 -o '0,1.2,2.2' -t ' '
FILE1.TXT FILE2.TXT
>JOIN_FILE.TXT
如果我仅使用从每个文件粘贴的20行左右的行来尝试该命令,它将正常工作
但是当我在整个文件上运行它时,输出非常糟糕,我不明白为什么。这两个文件都是使用排序-k1,1进行排序的,因此即使1中的某些行不在2中,反之亦然,它们的顺序也是相同的
我得到的是一个项目的重复条目,例如:(同样,我只显示输出文件的一小部分…)
其中,本质上所有内容都已复制,其中一行表示文件1中的值,另一行表示文件2中的值。这可能是因为文件之间的累积差异(即,在这些特定条目之前的所有非成对条目?)
这种对输出的加扰会在整个文件中运行
我做错了什么?我是否没有指定两个文件中的条目并不总是匹配
有什么办法解决这个问题吗
非常感谢!
卡门
编辑:
下面是每个文件的前15行,以表明两者的顺序相同,但情况开始有所不同,因为FILE1中的项目开始出现,而FILE2中的项目则不存在,反之亦然。我不知道这是否是造成混乱的原因
==> FILE1 <==
128up 139
140up 170
14-3-3epsilon 4488
14-3-3zeta 24900
18w 885
26-29-p 517
2mit 3085.34
312 64
4EHP 9012.57
5.8SrRNA:CR40454 16.5
5-HT1A 1867
5-HT1B 366
5-HT2 2611.27
5-HT7 1641.67
5PtaseI 462
==> FILE2 <==
128up 80
140up 19
14-3-3epsilon 1718
14-3-3zeta 5554
18w 213
26-29-p 200
2mit 680.786
312 33
4EHP 1838.44
5-HT1A 303
5-HT1B 42
5-HT2 553.65
5-HT7 348.5
5PtaseI 105
5S_DM 46054.4
==>FILE1 FILE2您的一个文件中可能有“空格”而不是“制表符”
当其中一行中有空格时,join命令似乎会给出重复的条目:
#>bash fjoin.sh
::加入:
join:s.file1s.txt:2:未排序:128up 139
::差异:
1c1,3
<12880
---
>128080
>1280升1390
>1281390
#>grep“”文件*txt
file1s.txt:128up 139
#>grep 128up file1s.txt
128up 139
128up 139
fjoin.sh
#/bin/bash
f1=“file1.txt”
f1s=“file1s.txt”
f2=“file2.txt”
#对文件进行排序并删除重复文件
排序-K1b,1${f1}|uniq>s.${f1}
排序-K1b,1${f1s}|uniq>s.${f1s}
排序-K1b,1${f2}|uniq>s.${f2}
echo:::加入:“
join-a1-a2-e“0”-11-21-o'0,1.2,2.2'-t's${f1}s${f2}>join-1_f1_f2.txt
join-a1-a2-e“0”-11-21-o'0,1.2,2.2'-t's${f1s}s${f2}>join-2_f1_f2.txt
回声“”
回声“::差异::”
diff joined-1_f1_f2.txt joined-2_f1_f2.txt
更新
按照Pierre的建议设置LC_ALL=C
,可能会有所帮助
将导出LC_ALL=C
添加到fjoin.sh后,差异较小:
#> bash fjoin.sh
:: join ::
:: diff ::
1a2
> 128up 139 0 0
您的一个文件中可能有“空格”而不是“制表符”
当其中一行中有空格时,join命令似乎会给出重复的条目:
#>bash fjoin.sh
::加入:
join:s.file1s.txt:2:未排序:128up 139
::差异:
1c1,3
<12880
---
>128080
>1280升1390
>1281390
#>grep“”文件*txt
file1s.txt:128up 139
#>grep 128up file1s.txt
128up 139
128up 139
fjoin.sh
#/bin/bash
f1=“file1.txt”
f1s=“file1s.txt”
f2=“file2.txt”
#对文件进行排序并删除重复文件
排序-K1b,1${f1}|uniq>s.${f1}
排序-K1b,1${f1s}|uniq>s.${f1s}
排序-K1b,1${f2}|uniq>s.${f2}
echo:::加入:“
join-a1-a2-e“0”-11-21-o'0,1.2,2.2'-t's${f1}s${f2}>join-1_f1_f2.txt
join-a1-a2-e“0”-11-21-o'0,1.2,2.2'-t's${f1s}s${f2}>join-2_f1_f2.txt
回声“”
回声“::差异::”
diff joined-1_f1_f2.txt joined-2_f1_f2.txt
更新
按照Pierre的建议设置LC_ALL=C
,可能会有所帮助
将导出LC_ALL=C
添加到fjoin.sh后,差异较小:
#> bash fjoin.sh
:: join ::
:: diff ::
1a2
> 128up 139 0 0
在排序和加入之前设置LC_ALL=C
。“谢谢你,”皮埃尔!这解决了问题,现在没有重复条目。你的链接帮了我很大的忙,实际上我把这些表格导入了我的Mac电脑,而不是从工作中加入CentOS。可能不会碰到这个问题…在排序和加入之前设置LC_ALL=C
。“谢谢你,”皮埃尔!这解决了问题,现在没有重复条目。你的链接帮了我很大的忙,实际上我把这些表格导入了我的Mac电脑,而不是从工作中加入CentOS。可能不会碰到这个问题…谢谢,大卫!LC_ALL=C实际上解决了这个问题。我用cat-vet在两个文件中查找空格,但它们在所有行中都只显示制表符和换行符。。。我想知道这些空间可能来自哪里,以及如何看到它们在那里?谢谢,大卫!LC_ALL=C实际上解决了这个问题。我用cat-vet在两个文件中查找空格,但它们在所有行中都只显示制表符和换行符。。。我想知道这些空间可能来自哪里,以及如何看到它们在那里?