如何解释Unix命令?

如何解释Unix命令?

我有一个命令,如下所示:

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.051783

您可以不那么惯用但更清晰地写出同样的内容,如下所示:

awk '{ 
        if(NR ==1 ){
            print
        } 
        else if ($NF < 0.05/1783){ 
            print 
        }
     }' PGC2.SCZ.1.dat

相关内容