文字と数字を使用した並べ替えと接続

文字と数字を使用した並べ替えと接続

2つのファイル(file1とfile2)があり、2つのファイルにない列を含む3番目のファイル(file3)をインストールしようとしています。私は通常、ソートを最初にして参加します。ただし、次の例のように、その値に文字と数字が含まれているため、機能しません。

ファイル1:

ARS-BFGL-BAC-1180 14 20574088
ARS-BFGL-BAC-11805 12 14897445
ARS-BFGL-BAC-11852 1 34309921
ARS-BFGL-BAC-11867 13 12616676 

ファイル2

AC16359 ARS-BFGL-BAC-11798 B B
AC16359 ARS-BFGL-BAC-11805 B B
AC16359 ARS-BFGL-BAC-1180 B B
AC16359 ARS-BFGL-BAC-11852 A A
AC16359 ARS-BFGL-BAC-11867 B B 

私は両方のために同じソートコマンドを使用し、最後のSNP_Name 11805は1180よりも高く、他方はそうではありません。

ベストアンサー1

一致するフィールドでのみソートします(例:file1の場合は-k1,1、file2の場合は-k2,2)。

例えば

$ join -1 1 -2 2  <(sort -k1,1 file1) <(sort -k2,2 file2) 
ARS-BFGL-BAC-1180 14 20574088 AC16359 B B
ARS-BFGL-BAC-11805 12 14897445 AC16359 B B
ARS-BFGL-BAC-11852 1 34309921 AC16359 A A
ARS-BFGL-BAC-11867 13 12616676 AC16359 B B

最初はバージョンソートのみを試しました(-V非標準--version-sortオプションであり、GNUまたは* BSDソートが必要です)。これはとの有無にかかわらず動作します-k1,1が、-k2,2より大きいまたは他のデータファイルセットでは安定して動作しない可能性があります。

キーフィールドに4桁または5桁(およびより多くの変形可能)を含めることができることを考慮して、以下を使用してください。自然な順序理想的です。だからバージョンソートを使用します。そしてキーフィールドを指定します。

join -1 1 -2 2  <(sort -V -k1,1 file1) <(sort -V -k2,2 file2)

おすすめ記事