我有一个文件如下:
AKT3
ARRB1
ATF2
ATF4
BDNF
BRAF
C00076
C00165
TNF
TNFRSF1A
TP53
TRAF2
TRAF6
对我来说,它是完美的分类。不是?另外,我有另一个文件,其中包含AKT3,BRAF,TRAF6等作为其第一个列元素。由于这个文件太大,我不把它放在这里。但是,在我输入后:
LANG=en_EN join -j 1 file2 file1 > output -t $'\t'
输出文件包含以下行:
TRAF6 0 genome...
TRAF6 0 genome...
TRAF6 0 genome...
TRAF6 0 genome...
我必须在此输出中看到以AKT3,BRAF等开头的其他行,但只有TRAF6行。问题是什么?如何获得正确的输出?感谢。
编辑:您可以从此链接获取大文件: https://www.dropbox.com/s/a2dmsq1tskpb9vg/sorted_mutation_data?dl=0
大约25 MB。对不起,我很抱歉。
编辑(2):让我们说...... 文件1:
ADA
ADAM
BRUCE
GARY
文件2:
AB 1
ABA 2
ABB 3
ADA 4
ADA 5
EVE 6
EVE 7
EVE 8
GARY 9
GARY 10
输出应为:
ADA 4
ADA 5
GARY 9
GARY 10
编辑:问题是由于某种方式隐藏在文本中的不可打印的ASCII字符引起的。将它们全部删除后,我可以使用"加入"。
答案 0 :(得分:1)
所以,我不知道你的环境是什么,但这对我来说(我使用一个明确的排序来确定它会起作用,并且还要揭示当你按默认排序整行时会发生什么整理顺序而不是显式字段。)
另请注意,我在-t $'\t'
命令的语句中没有join
。如果您的第二个文件具有制表符分隔的字段,那么您需要使用真正的制表符正确表达,并使用文件名前的选项,并且您可能必须确保使用相同的键对文件进行排序和字段分隔符。
#! /bin/sh
f1=$(mktemp -t jdata)
f2=$(mktemp -t jdata)
trap "RC=$?; rm -f $f1 $f2*; exit $RC" 0 1 2 3 15
sort > $f1 <<__EOF__
ADA
ADAM
BRUCE
GARY
__EOF__
sort > $f2 <<__EOF__
AB 1
ABA 2
ABB 3
ADA 4
ADA 5
EVE 6
EVE 7
EVE 8
GARY 9
GARY 10
__EOF__
join -j 1 $f1 $f2
sh ./tjoin-multi.sh
ADA 4
ADA 5
GARY 10
GARY 9