ファイル1
#CHROM POS ID REF_Zv ALT_lm
chr1A 219620 . T A
chr1A 219648 . A G
chr1A 219867 . A G
file2
#CHROM POS ID REF_Zv ALT_RV
chr1A 219457 . C T
chr1A 219670 . A G
chr1A 219867 . A C
ファイル3
#CHROM POS ID REF_Zv ALT_lm ALT_RV
chr1A 219620 . T A NA
chr1A 219648 . A G NA
chr1A 219867 . A G C
chr1A 219457 . C NA T
chr1A 219670 . A NA C
私の命令は
awk 'FNR==NR{a[$1,$2];next} {if(a[$1,$2]==""){a[$1,$2]=0};print \
$1,$2,$3,$4,$5, a[$4,$5]} ' file1 file2 > file3
しかし、欲しい file3 を取得できません。コマンドを改善するのを手伝ってもらえますか?
ありがとう、ふよう
私はあなたがオンザフライシングルパスでこれを行うことができるとは思わない-あなたのいずれかのインデックス付き保存する必要性ALT_lm
とALT_RV
価値を、マージ/でそれらを印刷END
ブロック(元の順序を維持するのは難しいだろう、その場合には-それが重要な場合)、またはファイルの1つに対して2つのパスを作成します: たとえば (醜い - およびGNU Awkが必要です):
$ gawk '
BEGIN {
OFS="\t";
print "#CHROM","POS","ID","REF_Zv","ALT_lm","ALT_RV";
}
BEGINFILE { fn++ }
FNR == 1 {next}
fn == 1 {ALT_RV[$1 FS $2] = $5; next}
fn == 2 {ALT_lm[$1 FS $2] = $5;}
{
print $1, $2, $3, $4, ($1 FS $2) in ALT_lm ? ALT_lm[$1 FS $2] : "NA", ($1 FS $2) in ALT_RV ? ALT_RV[$1 FS $2] : "NA";
}' file2 file1 file2
#CHROM POS ID REF_Zv ALT_lm ALT_RV
chr1A 219620 . T A NA
chr1A 219648 . A G NA
chr1A 219867 . A G C
chr1A 219457 . C NA T
chr1A 219670 . A NA G
chr1A 219867 . A G C
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加