.dllを使用して以下の2つのリンクされたファイルをリンクできませんjoin -t $'\t' -a1 file_1 file_2
。次の説明に従って、結合が機能するようにソートするときに特定のフラグを使用する必要があることに注意してください。これそしてこれ郵便はがき。具体的には、次の構文を使用してfile_1とfile_2を並べ替えましたcat file_1 | LANG=en_EN sort k1b,1
。
私が得るエラーは次のとおりです。
https://drive.google.com/open?id=1vlh9NqD1Nlm6dQi33Qt0gevsLfYxRURN
これに問題があります。たとえば、「S2_005_008G1__bin.1」エントリは、file_1とfile_2の両方に存在しても結合できません。
申し訳ありません。簡単なおもちゃの例はありませんが、手作りのファイルではこのエラーを再現できません。この問題の原因が何であるかは本当にわかりません。
答え1
join
一致するオプションとロケールを使用する必要がありますsort
。タブ区切りフィールドを指定する場合は、タブ区切りフィールドjoin
も指定する必要がありますsort
(デフォルトはスペースで区切られています)。
LANG
環境変数の設定は、LC_COLLATE
ロケールを設定することも、設定しない場合もあります。環境が設定されている場合は環境変数がLC_COLLATE
優先され、LANG
環境変数が設定されるとすべてのロケールが設定されます。LC_ALL
バラよりLC_*を設定しますが、LC_ALLは設定しません
特定の「人」の方法でファイルをソートする必要がない場合は、バイト順序C
のみを使用する対照ロケールを使用してください。他のロケールが必要ない限り、残りのLC_ALL
スクリプトまたは親プロセスから継承された設定を上書きする必要があります。それにもかかわらず、join
と同じロケールを使用する必要がありますsort
。
LC_ALL=C sort -t $'\t' -k 1b,1 file_1 >file_1.sorted
LC_ALL=C sort -t $'\t' -k 1b,1 file_2 >file_2.sorted
LC_ALL=C join -t $'\t' -a1 file_1.sorted file_2.sorted