Sort

排序和連接不起作用的特定情況

  • April 20, 2020

我在使用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

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

引用自:https://unix.stackexchange.com/questions/581248