删除bash中两列之和等于某个值的行

  • 本文关键字:于某个 两列 bash 删除 bash awk
  • 更新时间 :
  • 英文 :


我有以下表格:

filename    w   POS ID  b   c   d   h 
766_V   13  73711300    rs35852582  0.03046218  0.49789916  0   0.0987395   
75_S    13  73711300    rs35852582  0.03046218  0.49789916  0.09821429  0.00052521  
81_Y    13  73711300    rs35852582  0.03046218  0.49789916  0.1968908   0.00105042   
2151_L  13  73711300    rs35852582  0.03046218  0.49789916  0.09768908  0.00105042       
2051_K  13  73711300    rs35852582  0.03046218  0.49789916  0.3105042   0.09768908   
921_V   13  73711300    rs35852582  0.03046218  0.49789916  0.00105042  0.09768908       
533_D   13  73711300    rs35852582  0.03046218  0.49789916  0.00105042  0.09768908       
330_M   13  73711300    rs35852582  0.03046218  0.49789916  0.00105042  0.09768908       
2954_A  13  73711300    rs35852582  0.03046218  0.49789916  0.00105042  0.09768908      

我想删除列bd中总和不为0.2的行。所以最后我希望只有>=0.257列中有和的行。结果表table:

filename    w   POS ID  b   c   d   h 
81_Y    13  73711300    rs35852582  0.03046218  0.49789916  0.1968908   0.00105042    
2051_K  13  73711300    rs35852582  0.03046218  0.49789916  0.3105042   0.09768908   

我尝试了这段代码,但是我找不到一个方法来指定两个特定的列:

awk 'NR>1 {sum=0; for (i=5; i<=NF; i++) { sum+= $i } if (sum > 0.2) print}' file.txt

使用下面的Perl一行代码:

perl -F't' -lane 'print if $. == 1 || ($F[4] + $F[6]) > 0.02;' file.txt > out.txt

Perl单行程序使用这些命令行标志:
-e:告诉Perl查找内联代码,而不是在文件中查找。
-n:每次循环输入一行,默认赋值给$_
-l:在执行内联代码之前剥离输入行分隔符(*NIX默认为"n"),并在打印时附加它。
-a:根据空格或-F选项中指定的regex将$_拆分为数组@F
-F'/t/':在制表符上分割@F,而不是在空白处。

$.:行号(检查是否为1,即是否为标题行,然后打印出来)。
$F[4]:第5列(数组@F的字段索引为0)。

参见:
perldoc perlrun:如何执行Perl解释器:命令行切换

最新更新