次の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を選択します。