2012-11-28 63 views
1

我需要使用Linux命令創建基於列匹配兩個輸入文件的輸出文件

輸入1來創建從兩個輸入文件的文件:

001 rs60180678 G T 100 PASS AVGPOST=1.0000;RSQ=0.9885;THETA=0.0002;AA=G;AN=2184;VT=SNP;LDAF=0.0019;SNPSOURCE=LOWCOV;AC=4;ERATE=0.0003;AF=0.0018;AFR_AF=0.01 GT:DS:GL 

輸入2:

001 . G T . . ;AA=0.0163934;AFE=0;ASNE=0;EUN=0;AFW=0.0113636;MED=0;LAT=0;VT=SNP;AF=0.0018 

預計產量:

001 rs60180678 G T . . ;AA=0.0163934;AFE=0;ASNE=0;EUN=0;AFW=0.0113636;MED=0;LAT=0;VT=SNP;AF=0.0018 

每個顏色由標籤空間分隔。

基於第1,2,4和5列匹配創建輸出

out文件的每一列由製表符分隔。

+1

你有什麼企圖? – squiguy

+1

你看過'join'工具嗎? – rici

回答

2

下面是與awk一個辦法:

awk 'BEGIN { FS=OFS="\t" } FNR==NR { a[$1,$2,$4,$5]=$3; next } ($1,$2,$4,$5) in a { $3=a[$1,$2,$4,$5] }1' file1 file2 

結果:

001 rs60180678 G T . . ;AA=0.0163934;AFE=0;ASNE=0;EUN=0;AFW=0.0113636;MED=0;LAT=0;VT=SNP;AF=0.0018 
+0

我忘了補充說這兩個輸入文件都是.gz文件(Commpressed)。** file1.vcf.gz **和** file2.vcf.gz **,輸出將是** file3.vcf.gz ** – AKR

+0

您可以使用gz文件的命令 – AKR

+1

@ user1782877:只需將'file1 file2'更改爲:'<(gzip -dc input1.vcf.gz)<(gzip -dc input2.vcf.gz)| gzip> output.vcf.gz' – Steve

0

另一種解決方案:

awk 'BEGIN{FS=OFS="\t"}{getline a < "file2"; split(a,b,"\t");print $1,$2,$3,$4,$5,b[6],b[7],b[8]}' file1 
相關問題