我正在尝试使用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
答案 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" }
'