awk根据同一文件中的数据打印消息

时间:2018-01-11 17:23:09

标签: awk

我正在尝试使用awk根据不同条件使用同一tab-delimeted file中的数据打印消息。也就是说---positive file---正在使用,然后两个条件相遇,变量count为2,因此打印出来。这似乎有效,但当我尝试为---negative file---添加条件时,这两个条件不符合^ unexpected newline or end of string的情况就是错误。我认为语法是正确的,但我错过了一些东西。谢谢你:)。

AWK

awk -F'\t' '$1=="Control" && $2=="Present" {count++} END{print count " controls detected"} $1=="Control" && $2!="Present" {print "0 controls detected"}' file

档案---否定---

Control NoCall
Control NoCall

档案---正面文件---

Control Present
Control Present

所需的输出---负面文件---

0 controls detected

所需的输出---肯定的文件---

2 controls detected

更正后的输出:

0 controls detected
0 controls detected

2 个答案:

答案 0 :(得分:1)

您的示例中似乎有一个未终止的双引号(")可能导致语法违规。顺便说一句,你可以使用三元运算符而不是搞乱多次检查

awk -F'\t' ' $1=="Control" { ($2 == "Present")?(count++):(count=0);}END{print count" controls detected"}' file

上述逻辑似乎适用于问题中的正面和负面文件。

答案 1 :(得分:1)

为什么在END{...}之后放置一个额外的模式 - 动作对?多数民众赞成。 并且它为每条符合模式/条件的行打印。我不认为这是有意的。

更有可能的是,您希望仅在END处使用默认值打印

echo "Control\tno\nControl\tno\nControl\tno" |\
awk -F '\t' '
    $1=="Control" && $2=="Present" { count++ }
    END { print (count?count:0) " controls detected" }
    '