以下awk
对于input1
(当所有必填字段都存在且具有值时)都很适用。根据awk
中的if
语句更新Exception
。 它不适用于input2
或input3
(其中所有必填字段都存在但该值不是预期的)。唯一的两个字段中不能有数字值是Barcode2
和Barcode3
。大多数时候他们会,但是当他们不存在时,这个词是missing
。我的问题是,当这两个字段中的任何一个或其中一个是missing
时,那么该字段可以在if
语句中被跳过或不使用。我不知道如何或在哪里做到这一点。谢谢 :)。awk根据if语句更新字段,除非关键字在字段中
输入tab-delimited
---条形码2和Barcode3都 “失踪”
Barcode1 Barcode2 Barcode3 NoBarcode Exception
38774136 missing missing 0.89
脚本
awk '
BEGIN { # Set input and output field separator:
FS = OFS = "\t"
}
NR == 1 {# Search line 1 of file
# Create array to tranlate needed field headers to field numbers:
for(i = 1; i <= NF; i++) {
f[$i] = i
}
next
}
{
if($f["Barcode1"] < 20000000 ||
$f["Barcode2"] < 2000000 ||
$f["Barcode3"] < 2000000) {
$f["Exception"] = "Failure due to low barcode reads"
}
else {
$f["Exception"] = "Pass"
}
print
}
' input
输入tab-delimited
电流输出应该是在传递异常的缺失字段不使用
Barcode1 Barcode2 Barcode3 NoBarcode Exception
38774136 missing missing 0.89 Failure due to low barcode reads
所需的输出输入tab-delimited
应该是通的异常处理因为缺失的字段不使用
Barcode1 Barcode2 Barcode3 NoBarcode Exception
38774136 missing missing 0.89 Pass
请编辑您的Q以显示您当前的输出以及样本输入中的必需输出。在评论中,口头描述几乎总是导致“哦,我的意思是X1,而不是X”的讨论链。祝你好运。 – shellter
我将当前输出添加到帖子中。谢谢 :)。 – Chris
你到达那里。我看到2组“输入2/3”的电流输出,我不想猜测哪个是期望的输出。请更新你的问题。另外,你的问题似乎与'&&'ed条件逻辑有关,像'NR> 1 {...}'这样的模式匹配块并没有太多帮助。你知道处理所有行的更一般的结构,ie.e awk -F,{if(cond1 && cond2 && .... || altCond ....){do stuff} else if(cond7 && cond8){other stuff}} else {more stuff}}'file'?祝你好运。 – shellter