まず、各ファイルの列3、5、7を一致させ、file1の行をfile2の対応する行の横に配置し、file1をfile2と並べ替えたいと思います。
これは2つの間のネストを維持する必要があるコードですが、file2をfile1に追加したいと思います。助けてくれてありがとう!
awk 'NR==FNR {a[$3$5$7];next}($3$5$7 in a){print $0}'
ファイル1
#Scaffold Position Ref. Nuclueotide Pid allele count Pid allele Non-pid allele count Non-pid allele Overlapping gene/region
NW_006532398.1 202035 C 35:0:0:0:0:0 A 0:0:29:0:0:0 C KCND2
NW_006532656.1 289646 C 0:26:0:0:0:0 T 0:0:26:0:0:0 C CNTN1
NW_006532656.1 289656 C 0:26:0:0:0:0 T 0:0:26:0:0:0 C CNTN1
NW_006532656.1 289666 A 0:26:0:0:0:0 T 0:0:26:0:0:0 C CNTN1
NW_006532656.1 289676 A 0:26:0:0:0:0 T 0:0:26:0:0:0 C CNTN1
NW_006532657.1 636 A 0:26:0:0:0:0 T 0:0:26:0:0:0 C CNTN1
NW_006532657.1 646 C 0:26:0:0:0:0 T 0:0:26:0:0:0 C CNTN1
NW_006532657.1 656 C 0:26:0:0:0:0 T 0:0:26:0:0:0 C CNTN1
NW_006532658.1 345 C 0:26:0:0:0:0 T 0:0:26:0:0:0 C CNTN1
ファイル2
#Scaffold Position Ref. Nuclueotide Pid allele count Pid allele Non-pid allele count Non-pid allele
HiC_scaffold_7 49526089 C 0:0:28:0:0:0 A 0:31:0:0:0:0 C
HiC_scaffold_7 49539537 C 27:0:0:0:0:0 T 0:0:0:29:0:0 C
HiC_scaffold_7 49972546 C 20:0:0:0:0:0 T 0:0:0:27:0:0 C
HiC_scaffold_7 49972556 A 20:0:0:0:0:0 T 0:0:0:27:0:0 C
HiC_scaffold_7 49972566 A 20:0:0:0:0:0 T 0:0:0:27:0:0 C
HiC_scaffold_7 49972576 A 20:0:0:0:0:0 T 0:0:0:27:0:0 C
HiC_scaffold_7 49972586 C 20:0:0:0:0:0 T 0:0:0:27:0:0 C
HiC_scaffold_7 49972596 C 20:0:0:0:0:0 T 0:0:0:27:0:0 C
HiC_scaffold_7 49972599 A 20:0:0:0:0:0 A 0:0:0:27:0:0 C
HiC_scaffold_7 49972646 C 20:0:0:0:0:0 T 0:0:0:27:0:0 C
ファイル3
#Scaffold Position Ref. Nuclueotide Pid allele count Pid allele Non-pid allele count Non-pid allele Scaffold Position Ref. Nuclueotide Pid allele count Pid allele Non-pid allele count Non-pid allele
HiC_scaffold_7 49526089 C 0:0:28:0:0:0 A 0:31:0:0:0:0 C NW_006532398.1 202035 C 35:0:0:0:0:0 A 0:0:29:0:0:0 C KCND2
HiC_scaffold_7 49539537 C 27:0:0:0:0:0 T 0:0:0:29:0:0 C NW_006532656.1 289646 C 0:26:0:0:0:0 T 0:0:26:0:0:0 C CNTN1
HiC_scaffold_7 49972546 C 20:0:0:0:0:0 T 0:0:0:27:0:0 C NW_006532656.1 289656 C 0:26:0:0:0:0 T 0:0:26:0:0:0 C CNTN1
HiC_scaffold_7 49972556 A 20:0:0:0:0:0 T 0:0:0:27:0:0 C NW_006532656.1 289666 A 0:26:0:0:0:0 T 0:0:26:0:0:0 C CNTN1
HiC_scaffold_7 49972566 A 20:0:0:0:0:0 T 0:0:0:27:0:0 C NW_006532656.1 289676 A 0:26:0:0:0:0 T 0:0:26:0:0:0 C CNTN1
HiC_scaffold_7 49972576 A 20:0:0:0:0:0 T 0:0:0:27:0:0 C NW_006532657.1 636 A 0:26:0:0:0:0 T 0:0:26:0:0:0 C CNTN1
HiC_scaffold_7 49972586 C 20:0:0:0:0:0 T 0:0:0:27:0:0 C NW_006532657.1 646 C 0:26:0:0:0:0 T 0:0:26:0:0:0 C CNTN1
HiC_scaffold_7 49972596 C 20:0:0:0:0:0 T 0:0:0:27:0:0 C NW_006532657.1 656 C 0:26:0:0:0:0 T 0:0:26:0:0:0 C CNTN1
HiC_scaffold_7 49972599 A 20:0:0:0:0:0 A 0:0:0:27:0:0 C
HiC_scaffold_7 49972646 C 20:0:0:0:0:0 T 0:0:0:27:0:0 C NW_006532658.1 345 C 0:26:0:0:0:0 T 0:0:26:0:0:0 C CNTN1
ベストアンサー1
まず、file2
前のタブを編集して削除します。それ以外の場合、フィールド 3、5、7 は一致しません。
awk -F"\t" '
NR==FNR{
a[FNR]=$3","$5","$7 # save fields 3,5,7
b[FNR]=(FNR==1 ? substr($0, 2) : $0) # save the line (remove first char on 1st line)
last=FNR # save the last line nr
next # continue with next line
}
{
printf $0 # print current line
for (i=1;i<=last;i++){
if(a[i]==$3","$5","$7){ # fields 3,5,7 match?
printf FS b[i] # append matching line
a[i]="" # clear value
break # break loop
}
}
print ""
}
' file1 file2
3,5,7フィールドを配列に保存a
し、現在の行を$0
配列に保存します(b
タイトルの場合は$0
最初の文字を除く)。処理するときは、配列内で最初に一致する要素を見つけ、そのインデックスを使用して配列行を追加してから、配列要素を消去します。#
file2
a
b
a