【问题标题】:Using join for cartesian product使用连接进行笛卡尔积
【发布时间】:2017-08-26 15:44:56
【问题描述】:

an answer 的cmets 中开始了关于使用GNU coreutils 的join 创建两个文件的笛卡尔积的讨论。一位网友建议:

$ join -j 2 -t '' file1 file2

产生file1file2 的笛卡尔积:

$ 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

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

以前有人遇到过这种情况吗?我做错了什么?

【问题讨论】:

  • 试过了,得到了你想要的输出:bash-3.00$ join -j 2 -t "" t1 t2 1a 1b 2a 2b 也在 tcsh 和 csh 上试过,它也在那里工作。检查您的 unix 内核的某些部分是否搞砸了。
  • @user2141046 你还在使用 bash 3 吗?请更新您的系统和join 版本(join --version)?
  • 加入(GNU coreutils)8.12

标签: bash shell unix gnu-coreutils


【解决方案1】:

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

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

【讨论】:

  • 是的,这行得通,干得好!知道为什么我的系统需要 \0 吗?
  • 我不确定,但是 -t 需要指定 char 作为参数,空字符是 '\0'
  • 不确定:man join: - - 如果 'sort' 没有选项,则使用 "join -t ''" - -
猜你喜欢
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 2021-10-12
  • 2015-10-16
  • 1970-01-01
  • 2018-02-03
  • 2013-01-15
  • 1970-01-01
相关资源
最近更新 更多