gpt4 book ai didi

bash:join 和 comm 之间的区别

转载 作者:行者123 更新时间:2023-12-02 07:45:40 25 4
gpt4 key购买 nike

# comm -12 /tmp/src /tmp/txt | wc -l
10338
# join /tmp/src /tmp/txt | wc -l
10355

这两个文件都是单列的字母数字字符串和排序-ed。它们不应该相同吗?


更新了以下@Kevin-s 的回答:

cat /tmp/txt | sed 's/^[:space:]*//' > /tmp/stxt
cat /tmp/src | sed 's/^[:space:]*//' > /tmp/ssrc

结果:

#join /tmp/ssrc /tmp/stxt | wc -l
516
# comm -12 /tmp/ssrc /tmp/stxt | wc -l
513

在手动检查 diff-s 时...由于 sed 未删除的一些空格,结果有所不同。

最佳答案

commjoin 之间有一些区别:

  1. comm 比较整行; join 比较行内的字段。
  2. comm 打印整行; join 可以打印选定的部分行。

当每个文件中只有一列数据时,差异相对较小。当您有多个列时,可能会有很大差异。

另请注意,在适当的情况下,join 可以从一个文件中输出多个数据副本,同时从另一个文件中加入不同的行。在我看来,这就像你的问题;您可能在其中一个文件中有一些重复值。假设你有:

src           txt
123 123
123
123

如果你执行comm -12 src txt,你会得到一行输出;如果你执行 join src txt,你将得到三行输出。这是预期的。

join 命令还可以处理“外部连接”,其中第二个文件中的第一个文件中的一行数据丢失(SQL 中的 LEFT OUTER JOIN),反之亦然(a RIGHT OUTER JOIN),或两者同时进行(FULL OUTER JOIN)。

总而言之,join 是一个更复杂的命令,但它试图完成更复杂的工作。两者都有用;但它们在不同的地方很有用。

关于bash:join 和 comm 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7234028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com