我试图根据两个文件的公共字段将两个文件连接在一起,并使用命令将其输出到文件中join
。
文件一:
C01:Nancy:Jones:[email protected]
C02:Barbara:Madison:[email protected]
C03:Tim:Adams:[email protected]
C04:Sarah:Moore:[email protected]
C05:John:Polk:[email protected]
C06:Paula:Jacobs:[email protected]
文件2:
R001:07/04/15:123.45:C01
R002:12/20/15:167.50:C03
R003:03/14/16:298.00:C06
R005:09/15/16:36.50:C03
R005:11/27/16:58.00:C02
R006:02/28/17:72.98:C05
预期输出
C01:Nancy:Jones:[email protected]:R001:07/04/15:123.45
C02:Barbara:Madison:[email protected]:R005:11/27/16:58.00
C03:Tim:Adams:[email protected]:R002:12/20/15:167.50
C03:Tim:Adams:[email protected]:R004:09/15/16:36.5
C05:John:Polk:[email protected]:R006:02/28/17:72.9
C06:Paula:Jacobs:[email protected]:R003:03/14/16:298.00
我尝试File2
先根据字段 4 进行排序,然后将其输出到新文件
sort -t: -k 4 File2 > File22
然后加入
join -t: -1 1 -2 4 -o '1.1 1.2 1.3 1.4 2.1 2.2 2.3' File1 File22 > File 3
但我总是得到一个空白的输出文件。我也不确定如何处理遗漏第 4 行fromFile1
以及这个事实C03
在 中出现了两次File2
。
答案1
您需要做两件事才能让事情按照您想要的方式运行。首先,通过附加> File 3
到命令末尾,您可以将输出重定向到命令,File
并将额外的参数添加3
到join
命令中。
为了解释为什么会发生这种情况,我最近(巧合的是!)回答了类似的问题重定向手册页的奇怪行为。基本上,它与 Bash 语法有关,您可以在 中阅读更多相关信息man bash
。
要修复该行为,您应该确保输出文件中没有空格,或者您应该转义空格,或者您应该用引号将文件名引起来。以下任何重定向都可以:
... > File3
... > File\ 3
... > "File 3"
现在解决输出中丢失的记录。这是由-a
标志处理的。从man join
:
-a FILENUM also print unpairable lines from file FILENUM, where FILENUM is 1 or 2, corresponding to FILE1 or FILE2
综上所述,以下命令对我有用(我将使用tee
而不是重定向来显示输出):
$ join -t: -1 1 -2 4 -o '1.1 1.2 1.3 1.4 2.1 2.2 2.3' -a 1 File1 <(sort -t: -k4 File2) | tee "File 3"
C01:Nancy:Jones:[email protected] :R001:07/04/15:123.45
C02:Barbara:Madison:[email protected] :R005:11/27/16:58.00
C03:Tim:Adams:[email protected]:R002:12/20/15:167.50
C03:Tim:Adams:[email protected]:R005:09/15/16:36.50
C04:Sarah:Moore:[email protected]:::
C05:John:Polk:[email protected]:::
C06:Paula:Jacobs:[email protected]:R003:03/14/16:298.00
答案2
与米勒http://johnkerl.org/miller/doc/reference.html命令是
mlr --csv --implicit-csv-header --headerless-csv-output --fs ":" join --ul -l 4 -r 1 -j 4 --lp l --rp r -f file2.csv file1.csv
你有
C01:R001:07/04/15:123.45:Nancy:Jones:[email protected]
C02:R005:11/27/16:58.00:Barbara:Madison:[email protected]
C03:R002:12/20/15:167.50:Tim:Adams:[email protected]
C03:R005:09/15/16:36.50:Tim:Adams:[email protected]
C05:R006:02/28/17:72.98:John:Polk:[email protected]
C06:R003:03/14/16:298.00:Paula:Jacobs:[email protected]