在awk中使用多个条件

时间:2014-11-20 14:48:45

标签: awk multiple-conditions

我想基于多个条件(来自同一个文件)从大文件中提取信息,以及从其他小文件中搜索模式,以下是我使用的脚本:

awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$0]++;next}$1 in a {print $2,$4,$5}' file2.txt file1.txt >output.txt

现在,我想在同一个awk脚本中使用条件,它只打印第4列元素(ATGC中的任何一个字符)与第5列元素(ATGC中的任何一个字符)匹配的行;该列都在文件1中。

因此,在某种程度上,我想用上面提到的脚本合并以下脚本:

awk '$4 " "==$5{print $2,$4,$5}' file1.txt

以下是file1.txt的表示形式:

SNP Name    Sample ID   GC Score    Allele1 - Forward   Allele2 - Forward
ARS-BFGL-BAC-10172  834269752   0.9374  A   G
ARS-BFGL-BAC-1020   834269752   0.9568  A   A
ARS-BFGL-BAC-10245  834269752   0.7996  C   C
ARS-BFGL-BAC-10345  834269752   0.9604  A   C
ARS-BFGL-BAC-10365  834269752   0.5296  G   G
ARS-BFGL-BAC-10591  834269752   0.4384  A   A
ARS-BFGL-BAC-10793  834269752   0.9549  C   C
ARS-BFGL-BAC-10867  834269752   0.9400  G   G
ARS-BFGL-BAC-10951  834269752   0.5453  T   T


enter code here

以下是file2.txt的表示

    ARS-BFGL-BAC-10172
    ARS-BFGL-BAC-1020
    ARS-BFGL-BAC-10245
    ARS-BFGL-BAC-10345
    ARS-BFGL-BAC-10365
    ARS-BFGL-BAC-10591
    ARS-BFGL-BAC-10793
    ARS-BFGL-BAC-10867
    ARS-BFGL-BAC-10951

输出应为:

834269752   A   A
834269752   C   C
834269752   G   G
834269752   A   A
834269752   C   C
834269752   G   G
834269752   T   T

1 个答案:

答案 0 :(得分:1)

您可以简单地使用布尔逻辑,并且从您的输入文件中看起来您可以通过“正常”输入字段拆分来逃避,这将允许您在比较中摆脱该空间:

awk 'BEGIN{OFS="\t"}
     NR==FNR{a[$0]++;next}
     ($1 in a) && ($4==$5) {print $2,$4,$5}' file2.txt file1.txt > output.txt

例如,这是我的测试file2.txt

ARS-BFGL-BAC-1020
ARS-BFGL-BAC-10172

这是上面命令的结果:

834269752   A   A