是不是&&&引用;实际上,在AWK编码中是什么意思?

是不是&&&引用;实际上,在AWK编码中是什么意思?,awk,Awk,我目前正在从一个大数据文件中筛选出具有特定模式的行。因为行需要满足我在awk中使用“&&”的几个规则。但我的印象是,这并不完全符合逻辑和逻辑 我的数据如下所示: Group EB1_D EN1_D EZ1_D LB1_D LN1_D LZ1_D MB1_D MN1_D MZ1_D TB1_D TN1_D TZ1_D AB1_D AN1_D AZ1_D OG0008871:Down 0.886835651 NA 0.20599

我目前正在从一个大数据文件中筛选出具有特定模式的行。因为行需要满足我在awk中使用“&&”的几个规则。但我的印象是,这并不完全符合逻辑和逻辑

我的数据如下所示:

    Group   EB1_D   EN1_D   EZ1_D   LB1_D   LN1_D   LZ1_D   MB1_D   MN1_D   MZ1_D   TB1_D   TN1_D   TZ1_D   AB1_D   AN1_D   AZ1_D
OG0008871:Down  0.886835651 NA  0.205991042 0.344286962 NA  0.212469765 0.934134739 NA  NA  0.087171422 0.144711362 0.002778751 NA  NA  NA
OG0021381:Down  0.65178744  0.000508521 0.477039947 NA  NA  NA  NA  NA  0.826395809 NA  NA  NA  NA  NA  NA
OG0011803:Up    NA  NA  NA  NA  NA  0.00734476  NA  NA  NA  0.458883104 NA  NA  NA  NA  NA
OG0015725:Up    NA  NA  NA  NA  0.858766006 NA  NA  NA  NA  0.376378076 0.196034543 0.329094645 0.062600211 0.080328374 0.017079806
我想过滤掉B1_D大于任何其他值的所有行,因此我使用以下方法(可能不是最实用的方法,但无论如何都应该有效):

awk '$2 > $3 && $2 > $6 && $2 > $7 && $2 > $4 && $2 > $9 && $2 > $10 && $2 > $12 && $2 > $13 && $2 > $15 && $2 > $16 && $5 > $3 && $5 > $6 && $5 > $7 && $5 > $4 && $5 > $9 && $5 > $10 && $5 > $12 && $5 > $13 && $5 > $15 && $5 > $16 && $8 > $3 && $8 > $6 && $8 > $7 && $8 > $4 && $8 > $9 && $8 > $10 && $8 > $12 && $8 > $13 && $8 > $15 && $8 > $16 && $11 > $3 && $11 > $6 && $11 > $7 && $11 > $4 && $11 > $9 && $11 > $10 && $11 > $12 && $11 > $13 && $11 > $15 && $11 > $16 && $14 > $3 && $14 > $6 && $14 > $7 && $14 > $4 && $14 > $9 && $14 > $10 && $14 > $12 && $14 > $13 && $14 > $15 && $14 > $16 END {print $0}'
应用此命令仅将行OG0015725:UP作为输出,但是: 其中一条规则是$11>$6。$11的值为0.376378076,$6的值为0.858766006

它不应该被选中,但它被选中了。我是否错误地应用了此代码? 奇怪的是OG0015725:UP是输入文件的最后一行,在我所有不同的输出文件中都被选中了


提前感谢您的任何输入。

是,
&&
表示awk状态评估

您没有正确使用它,您应该执行以下操作:

awk '$1>$2 && $2 > $4{ some action }...' input
你所拥有的:

awk '$1>$2 && $2 > $4 END{.action...}' input
如果要使用快捷方式检查和打印当前行:

awk '$1>$2 && $2 > $4; END{...}' input

顺便说一句,一定有更好的方法来检查您的looooong。

是的,
&&
意味着在awk条件下进行评估

您没有正确使用它,您应该执行以下操作:

awk '$1>$2 && $2 > $4{ some action }...' input
你所拥有的:

awk '$1>$2 && $2 > $4 END{.action...}' input
如果要使用快捷方式检查和打印当前行:

awk '$1>$2 && $2 > $4; END{...}' input

顺便说一句,你的looooong支票一定有更好的方法。

这里有一个比写链更好的方法
$1>$2&&$1>$3&&$1>$4

awk 'function max(x,y) { return x>y?x:y }
     function maxof(xs) { n=split(xs,a); m=a[1]; for(i=2;i<=n;i++) m=max(m,a[i]); return m}
     $1 > maxof($2 FS $3 FS $4) {...'
awk'函数max(x,y){返回x>y?x:y}
函数maxof(xs){n=split(xs,a);m=a[1];for(i=2;i maxof($2fs$3fs$4){…'

有效,因为
x>y&&x>zx>max(y,z)

这里有一个比编写链
$1>$2&&1>$3&&1>$4更好的方法

awk 'function max(x,y) { return x>y?x:y }
     function maxof(xs) { n=split(xs,a); m=a[1]; for(i=2;i<=n;i++) m=max(m,a[i]); return m}
     $1 > maxof($2 FS $3 FS $4) {...'
awk'函数max(x,y){返回x>y?x:y}
函数maxof(xs){n=split(xs,a);m=a[1];for(i=2;i maxof($2fs$3fs$4){…'

有效,因为
x>y&&x>zx>max(y,z)

(a)我得到一个语法错误,在
END
之前缺少一个分号(b)你的
END{print$0}
打印最后一行,而不是你的ANDed条件。(a)我得到一个语法错误,在
END
之前缺少一个分号(b)你的
END{print$0}
打印最后一行,而不是您的AND条件。这似乎对我还不起作用。我将所有行作为输出,没有选择。我假设我忘记了编辑我应该编辑的内容?作为命令,我完全按照给定的方式复制了所有内容,对吗?这似乎对我还不起作用。我将所有行作为输出,没有选择。我假设我忘记了o在我应该这样做的地方编辑一些东西?作为命令,我完全按照给定的方式复制了所有内容,对吗?是的,我已经得到了一些建议,可以用不同的方式来进行编辑!但是现在这很有效,感谢您的改进!我现在面临的最后一个问题是awk发现缺少值或NA是一个积极的结果。那么呃,当它到达语句$1>$2且NA>2时,它会将其视为阳性。我如何让AWK跳过NA?@T\R您可以检查是否有与数字匹配的值。在AWK
“FOO”>2
中,它将被评估为
false
也将被评估为
“NA”
。是的,我已经得到了一些建议,可以用不同于这场长时间争论的方式来做!但现在这是可行的,感谢改进!我现在面临的最后一个问题是,awk看到缺失值或NA是一个积极的结果。因此,每当它到达语句$1>$2且NA>2时,它都会将其视为一个积极的结果。我怎么能让awk滑雪呢p NA的?@T\R您可以检查是否有与数字匹配的值。在awk
中,“FOO”>2
将被评估为
false
“NA”