我有一个命令,如下所示:
cat PGC2.SCZ.1.dat | awk 'NR == 1 || $NF < 0.05/1783'
所以我想这部分意味着跳过第一行
awk 'NR == 1
但这指的是什么?
|| $NF < 0.05/1783'
谢谢
答案1
NR
表示“记录数”,指的是流式传输到的行awk
。 (默认情况下,每个新的非空行都是一条新记录。可以定义不同的记录分隔符RS
。那么该术语line
在这里就不再正确了。)
NF
意思是“字段数”,指的是行中的列数。由于$
之前的原因NF
,我们要求提供最后一列中的值。 (注意:默认情况下,任何空格或制表符都用作列分隔符,也称为字段分隔符FS
)
意思||
是“或”。
总之,您的命令将打印出第一行PGC2.SCZ.1.dat
以及最后一列中的值小于 0.05/1783 的所有行。
答案2
首先,由于您正在学习 *nix,因此这是“无用使用 cat”(*nix 世界中著名的比喻)的示例。这里不需要cat file | awk command
,你可以这样做awk command file
。
无论如何,继续 awk。当 awk 中表达式求值为 true 时,默认操作是打印当前行。NR
是当前行号,因此NR == 1
对于文件的第一行也是如此。然后,awk 将其输入拆分为空白字段(或您使用该-F
选项选择的任何其他内容)。然后,这些字段可用作变量$1
, $2
, ... $NF
,其中NF
是字段数。因此$NF
是最后一个字段的内容。
将所有这些放在一起,表达式在第一行和最后一个字段小于除以 的awk 'NR == 1 || $NF < 0.05/1783'
任何其他行上将为 true 。0.05
1783
您可以不那么惯用但更清晰地写出同样的内容,如下所示:
awk '{
if(NR ==1 ){
print
}
else if ($NF < 0.05/1783){
print
}
}' PGC2.SCZ.1.dat