-1

入力1

1 10611 2 122 C:0.983607 G:0.0163934

入力2

1 10611 rs146752890 C G 100 PASS AC = 184; RSQ = 0.8228; AVGPOST = 0.9640; AN = 2184; ERATE = 0.0031; VT = SNP; AA = .; THETA = 0.0127; LDAF = 0.0902; SNPSOURCE = LOWCOV; AF = 0.08 ; ASN_AF = 0.08; AMR_AF = 0.14; AFR_AF = 0.08; EUR_AF = 0.07

ここで、1番目と2番目の列は一致しており、最初のファイルの5番目の列の':'の前の値と2番目のファイルの4番目の列はequelであり、2番目のファイルの1番目と5番目の列の6番目の列(':'の前の値)はequelであり、出力はこの一致に基づいて作成します。入力行と出力行から明確なアイデアが得られ、両方のファイルは.gzファイルです。

出力

1 10611 rs146752890 CG 100 PASS AC = 184; RSQ = 0.8228; AVGPOST = 0.9640; AN = 2184; ERATE = 0.0031; VT = SNP; AA = .; THETA = 0.0127; LDAF = 0.0902; SNPSOURCE = LOWCOV; AF = 0.08; ASN_AF = 0.08; AMR_AF = 0.14; AFR_AF = 0.08; EUR_AF = 0.07; REF = 0.983607; ALT = 0.0163934;

4

2 に答える 2

1

使用する1つの方法は次のawkとおりです。

awk 'FNR==NR { split($5,a,":"); split($6,b,":"); c[$1,$2,a[1],b[1]]="REF=" a[2] ";ALT=" b[2] ";"; next } ($1,$2,$4,$5) in c { print $0 ";" c[$1,$2,$4,$5] }' input1 input2

結果:

1 10611 rs146752890 C G 100 PASS AC=184;RSQ=0.8228;AVGPOST=0.9640;AN=2184;ERATE=0.0031;VT=SNP;AA=.;THETA=0.0127;LDAF=0.0902;SNPSOURCE=LOWCOV;AF=0.08;ASN_AF=0.08;AMR_AF=0.14;AFR_AF=0.08;EUR_AF=0.07;REF=0.983607;ALT=0.0163934;

したがって、圧縮ファイルの場合は、次を試してください。

awk 'FNR==NR { split($5,a,":"); split($6,b,":"); c[$1,$2,a[1],b[1]]="REF=" a[2] ";ALT=" b[2] ";"; next } ($1,$2,$4,$5) in c { print $0 ";" c[$1,$2,$4,$5] }' <(gzip -dc input1.gz) <(gzip -dc input2.gz) | gzip > output.gz

編集:

以下のコメントから、これを試してください:

awk 'FNR==NR { split($5,a,":"); split($6,b,":"); c[$1,$2,a[1],b[1]]="REF=" a[2] ";ALT=" b[2] ";"; next } ($1,$2,$4,$5) in c { print $1, $2, $3, $4, $5, $6, $7, c[$1,$2,$4,$5] $8 ";" }' file1 file2

結果:

1 10611 rs146752890 C G 100 PASS REF=0.983607;ALT=0.0163934;AC=184;RSQ=0.8228;AVGPOST=0.9640;AN=2184;ERATE=0.0031;VT=SNP;AA=.;THETA=0.0127;LDAF=0.0902;SNPSOURCE=LOWCOV;AF=0.08;ASN_AF=0.08;AMR_AF=0.14;AFR_AF=0.08;EUR_AF=0.07;
于 2012-12-06T12:13:52.013 に答える
0

これは機能するはずです(拡張された.gzファイルを保存するのに十分なディスク容量があると仮定します):

zcat 1 | awk '{print $1$2,$0}' | sort > new1
zcat 2 | awk '{print $1$2,$0}' | sort > new2
join new1 new2 -11 -21 -o "2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 1.6 1.7"|sed 's/ C:/;REF=/'|sed 's/ G:/;ALT=/' > output
于 2012-12-06T09:46:09.637 に答える