ソートと結合が機能しない特定のケース

ソートと結合が機能しない特定のケース

.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ファイル_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

関連情報