使用键中带空格的连接

使用键中带空格的连接

我在使用 join 命令合并两个文件时遇到问题:第一个文件是 csv 文件:

NAIN GENIEU 01/01/1900,A,B
NAIN GENIEUR 01/01/1917,C,D
NAINGENIEUR 21/01/1917,E,F

第二个文件仅包含有趣的 id:

NAIN GENIEUR 01/01/1917

我想要这个作为输出:

NAIN GENIEUR 01/01/1917,C,D

这两个文件都是用 bashsort命令排序的。当我在没有任何参数的情况下使用 join 时,它默认为空格,因此它通过PSEUDO但不考虑BIRTHDAY中空格之后的任何内容进行连接PSEUDO。当我使用-t","参数时,我根本没有输出(即使应该有)

关于如何解决这个问题有任何线索吗?顺便说一句,我使用 join v.8.4

编辑我尝试在第一个字段(可能包含空格)周围加引号,但这没有帮助。

答案1

您的字段不匹配(至少在示例中)您调用“full csv”的文件具有字段“PSEUDO BITHDAY”,而第二个文件具有字段“PSEUDO BITHDAY” 第二个文件中多了一个 R。

选项 -t 在 join 的所有版本中都适用。

编辑 : 你的例子对我有用

    bash-4.1$ join -t, a b
    NAIN GENIEUR 01/01/1917,C,D
    bash-4.1$ join --version
    join (GNU coreutils) 8.4
    Copyright (C) 2010 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.

    Written by Mike Haertel.
    bash-4.1$

答案2

你的命令应该有效。但是,至少在您显示的示例中, 中的行尾有一个空格file2。这很重要,它被视为该领域的一部分。如您所见,删除它会按预期连接文件:

$ join -t"," -j 1 file1 file2  ## no output
$ sed -i 's/ $//' file2        ## remove the trailing space
$ join -t"," -j 1 file1 file2  ## now it works
NAIN GENIEUR 01/01/1917,C,D

相关内容