Sort
排序和連接不起作用的特定情況
我在使用
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 中,但無法連接。
抱歉,我無法給出一個簡單的玩具範例,但我無法使用手工製作的文件重新生成此錯誤。我真的很茫然,因為可能會導致這個問題。
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