簡體   English   中英

使用AWK匹配2個文件之間的多個字段並顯示特定字段

[英]Match multiple fields between 2 files with AWK and display specific fields

我有2個文件,如下所示:file1.txt

chr pos ref totoal  A   C   T   G
chr1    2488104 A   8690    99.954  0.0230  0   0.0230
chr1    2488105 T   8847    0   99.954  0.022   0.0226
chr1    2488106 G   8902    0.011   0.0337  0   99.955
chr1    2488107 G   8875    0   0.02252 0   99.977
chr1    2488108 A   8674    99.919  0   0.011   0.0691
chr1    2488109 G   9116    0.021   0.0658  0   99.912
chr1    2488110 C   9191    0.087   0.0652  99.847  0
chr1    2488111 C   9291    0   0.0430  99.956  0
chr1    2488112 T   9254    0   100 0   0
chr1    2488113 C   9354    0   0.0427  99.957  0
chr1    2488114 C   9493    0   0.0842  99.915  0

和file2.txt:

chr1    2488111 T   0.09
chr1    2488105 C   0.053
chr1    2488115 G   0.03

如果$ 1和$ 2在兩個文件之間匹配,我想提取file1列AD的數值。 列提取內容的選擇應取決於file2的$ 3字段(即“ chr1 2488111 T”,我將返回“ 99.956”,因為它是列“ T”中chr1位置2488111的報告值)。

我找到了一堆代碼來匹配兩個文件之間的字段,但是我不能只收回自己感興趣的值。 AWK是以下內容:

awk '
BEGIN           {FS = OFS = "\t"
                }

NR==FNR         {for (n = split ($2, a); n>0; n--) CMP[$1, a[n]]
                 next
                }($1,$2) in CMP {print $0      
                }
'  file2.txt file1.txt

我想返回一個基於字段之間的匹配以及file2的$ 3和file1的標頭之間的匹配從file1中提取的單個值。

理想的輸出是報告file2的原始行,並在該行的末尾附加值:

chr1    2488111 T   0.09   99.956
chr1    2488105 C   0.053   0
chr1    2488115 G   0.03   NA

它與您發布的預期輸出不匹配,但是確實滿足您的問題描述,因此我認為這可能正是您真正想要的:

$ cat tst.awk
BEGIN { FS=OFS="\t" }
NR==FNR {
    if (NR == 1) {
        for (i=1; i<=NF; i++) {
            fldNr2name[i] = $i
        }
        next
    }
    for (fldNr=3; fldNr<=NF; fldNr++) {
        fldName = fldNr2name[fldNr]
        vals[$1,$2,fldName] = $fldNr
    }
    next
}
{
    print $0, ( ($1,$2,$3) in vals ? vals[$1,$2,$3] : "NA" )
}

$ awk -f tst.awk file1 file2
chr1    2488111 T       0.09    99.956
chr1    2488105 C       0.053   99.954
chr1    2488115 G       0.03    NA

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM