2017-05-07 76 views
2

an answer的评论中,开始讨论与使用GNU coreutils'join创建两个文件的笛卡尔乘积。一位同行的用户建议:使用加入笛卡尔产品

$ join -j 2 -t '' file1 file2 

生产和file1笛卡尔积file2

$ cat file1 
1 
2 
$ cat file2 
a 
b 

预期输出:

$ join -j 2 -t '' file1 file2 
1a 
1b 
2a 
2b 

嗯,我越来越:

$ join -t '' -j 2 file1 file2 

1 
a 

1 
b 

2 
a 

2 
b 

我已经在C和en_US.utf8语言环境(所有系统由不同方安装和管理)中测试了Debian Jessies(join(GNU coreutils)8.23)和Ubuntu Trusty Tahr(join(GNU coreutils)8.21)。据报道,join在OS X和一个带有join(GNU coreutils)8.22的系统中表现如预期。

有没有人碰到过这个?我究竟做错了什么?

+0

尝试过了,有你需要的输出: '的bash-3.00 $加入-j 2 -t “” T1 T2 1A 1B 2A 2b' 也试过它在tcsh和csh,它也在那里工作。检查你的unix karnel的某些部分是否搞乱了。 – user2141046

+0

@ user2141046你还在bash 3?请更新你的系统和'加入'版本('join --version')? –

+0

加入(GNU coreutils)8.12 – user2141046

回答

2

你需要为分隔符用 '\ 0'

join -t '\0' -j 2 file1 file2 
+2

我编辑过。你需要使用分隔符'\ 0' – tso

+0

是的,这工作,很好的工作!任何想法为什么在我的系统中需要'\ 0'? –

+1

我不确定,但-t需要指定char作为参数,null字符是'\ 0' – tso