
両方のファイルをマージするためにJoinコマンドを使用するのに問題があります。最初のファイルはcsvファイルです。
NAIN GENIEU 01/01/1900,A,B
NAIN GENIEUR 01/01/1917,C,D
NAINGENIEUR 21/01/1917,E,F
2番目のファイルには興味深いIDのみが含まれています。
NAIN GENIEUR 01/01/1917
私はこれを出力として欲しい:
NAIN GENIEUR 01/01/1917,C,D
どちらのファイルもsort
bash コマンドを使用してソートされます。引数なしで結合を使用すると、デフォルトでは空白が使用されるため、結合は行われますが、空白の後は何もPSEUDO
考慮しません。パラメータを使用すると、出力はまったく表示されません(必要があるにもかかわらず)。BIRTHDAY
PSEUDO
-t","
この問題を解決する方法についての手がかりはありますか?ところで、私はJoin v.8.4を使用しています。
編集する最初のフィールド(スペースを含めることができます)の周りに引用符を入れようとしましたが、役に立ちませんでした。
答え1
あなたのフィールドが(少なくともあなたの例では)「full csv」と呼ばれるファイルに「PSEUDO BITHDAY」フィールドがあり、2番目のファイルに「PSEUDO BI」フィールドが一致しません。右THDAY "2番目のファイルには追加の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