6つのテキストファイル(それぞれは特定の例に対応)があり、各ファイルは次のとおりです。
Gene_ID Gene_Name Strand Start End Length Coverage FPKM TPM
ENSMUSG00000102735 Gm7369 + 4610471 4611406 936 0 0 0
ENSMUSG00000025900 Rp1 - 4290846 4409241 10926 0 0 0
ENSMUSG00000104123 Gm37483 - 4363346 4364829 1484 0 0 0
ENSMUSG00000102175 Gm6119 - 4692219 4693424 1206 0.328358 0.015815 0.008621
列1と2のすべての要素を1つのファイルに収集し、各サンプルに対応するtpm値(列9)を新しいファイルに収集したいので、tpm値がない場合は常に0を入力します。
私の出力ファイルは次のようになります。
gene_id gene_name sample1_tpm sample2_tpm sample3_tpm ......sample6_tpm
ベストアンサー1
awk
このソリューションは、gene_idとgene_nameでインデックス付けされた配列の6つの入力ファイルの両方からTPM値を収集し、file1
最後file6
に各配列インデックスに対してマージされたTPM値を印刷するために使用されます。欠落しているTPM値は0に置き換えられます。
awk '
BEGIN {
f=0
}
{
if ($1 == "Gene_ID") {
f++; getline;
}
i = $1 " " $2
row[i] = row[i] " " (($9 == "") ? "0" : $9)
}
END {
for (i in row) print i,row[i]
}
' file1 file2 file3 file4 file5 file6