Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何选择行中负数之和等于或小于-3(带awk)的行?_Awk - Fatal编程技术网

如何选择行中负数之和等于或小于-3(带awk)的行?

如何选择行中负数之和等于或小于-3(带awk)的行?,awk,Awk,我有这样一个示例文件: probeset_id submitted_id chr snp_pos alleleA alleleB 562_201 562_202 562_203 562_204 562_205 562_206 562_207 562_208 562_209 562_210 AX-75448119 Chr1_41908741 1 41908741 T C 0 -1 0 -1 0 0 0 0 0 -1 AX-75448118 Chr1_41908545 1 41908545 T

我有这样一个示例文件:

probeset_id submitted_id chr snp_pos alleleA alleleB 562_201 562_202 562_203 562_204 562_205 562_206 562_207 562_208 562_209 562_210  
AX-75448119 Chr1_41908741 1 41908741 T C 0 -1 0 -1 0 0 0 0 0 -1 
AX-75448118 Chr1_41908545 1 41908545 T A 2 -1 2 2 2 -1 -1 2 2 0
AX-75448118 Chr1_41908545 1 41908545 T A 1 2 -1 2 2 -1 2 -1 2 0 
我想排除负数之和小于-3的行,我知道如何计算负数之和并打印它,代码如下:

awk 'BEGIN{sum=0} NR >=2 {for (i=7;i<=NF;i++) if ($i ~ /^-/) sum += $i; print $1,$2,$3,$4,$5,$6,sum; sum=0}' test.txt > out.txt
我没有收到任何错误,但是out.txt文件是空的

awk 'BEGIN{sum=0} NR >=2 {for (i=7;i<=NF;i++) if ($i ~ /^-/) sum += $i; if sum >= -3 pritn R; sum=0}' test.txt | wc -l
如何确保第一个行头也在输出文件中? 所以我想把这个放出来:

probeset_id submitted_id chr snp_pos alleleA alleleB 562_201 562_202 562_203 562_204 562_205 562_206 562_207 562_208 562_209 562_210  
    AX-75448119 Chr1_41908741 1 41908741 T C 0 -1 0 -1 0 0 0 0 0 -1 
    AX-75448118 Chr1_41908545 1 41908545 T A 2 -1 2 2 2 -1 -1 2 2 0
试试这个:

awk '
  NR == 1 { 
    print 
    next 
  } 
  { 
    negsum=0 
    for(i=7; i<=NF; i++) { 
      if ($i<0) {
        negsum += $i 
      } 
  } 
  negsum <= -3'
您的第一次尝试失败,因为您使用了两种不同的awk调用。这是正在运行的两个不同的程序,第二个程序不知道第一个程序中的sum变量,因此它使用默认值sum=0

第二次尝试只是拼写错误。您使用了pritn而不是print。

请尝试以下操作:

awk '
  NR == 1 { 
    print 
    next 
  } 
  { 
    negsum=0 
    for(i=7; i<=NF; i++) { 
      if ($i<0) {
        negsum += $i 
      } 
  } 
  negsum <= -3'
您的第一次尝试失败,因为您使用了两种不同的awk调用。这是正在运行的两个不同的程序,第二个程序不知道第一个程序中的sum变量,因此它使用默认值sum=0


第二次尝试只是拼写错误。您使用了pritn而不是print。

您所描述的内容可以更容易地使用正确的格式进行编码。并不是说我总是在编写awk脚本时使用编辑器

第一个条件NR==1只是确保按原样打印第一行

awk '
NR == 1 { print }
NR >= 2 {
    sum = 0;
    for (i=7;i<=NF;i++) {
        if ($i < 0)
            sum += $i;
    }
    if (sum <= -3)
        print;
}
' test.txt > out.txt

您所描述的内容可以更容易地使用正确的格式进行编码。并不是说我总是在编写awk脚本时使用编辑器

第一个条件NR==1只是确保按原样打印第一行

awk '
NR == 1 { print }
NR >= 2 {
    sum = 0;
    for (i=7;i<=NF;i++) {
        if ($i < 0)
            sum += $i;
    }
    if (sum <= -3)
        print;
}
' test.txt > out.txt