列を個別に一致させて列に貼り付ける方法

列を個別に一致させて列に貼り付ける方法

次の2つのファイルがあります。

    file1.txt  
    0 rs3094315 0 0 C T  
    0 rs12562034 0 0 A G  
    0 rs3934834 0 0 C T  

    file2.txt  
    Chr,Pos,snp_name  
    1, 742429,rs3094315   

file1の最初の列はChr列でもあり、file2のchr列に置き換える必要があります。ただし、次のようにsnpと一致する必要があります。

    file3  
    1 rs3094315 0 0 C T  

File2は行と列番号が異なります。

答え1

すでにここに部分的に答えています。 https://stackoverflow.com/questions/24516141/awk-processing-2-files-with- Different-field-separators

awk 'NR==FNR {arr[$2]=$2FS$3FS$4FS$5FS$6; next} {print $1,arr[$3]}' file1 FS="," file2 
1 rs3094315 0 0 C T

答え2

joinプロセス置換を理解するシェルを使用してください。

$ join -t ' ' -1 2 -2 3 -o2.1,0,1.3,1.4,1.5,1.6 <( sort -k2 file1 ) <( tr ',' ' ' <file2 | sort -k3 )
1 rs3094315 0 0 C T

2番目のファイルはfile2最初のファイルとは異なるフィールド区切り文字を使用するため、問題がありますfile1。この問題は、その内容を実行してすべてのtrコンマを空白に置き換えることで解決できます。

2 つのファイルは、データを結合するフィールドに基づいてソートされます。最初のファイルのフィールド 2 と 2 番目のファイルのフィールド 3。

次に、2つのデータセットをjoin読み取り、スペースで区切られた指定されたフィールドに接続します。

出力フィールドは-oフラグによって決定されます。 2番目のファイルの最初のフィールド(結合フィールド)を選択し、最初のファイルでフィールド3〜6を選択します。

関連情報