我有以下表格:
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
我想删除列b
和d
中总和不为0.2的行。所以最后我希望只有>=0.2
的5
和7
列中有和的行。结果表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解释器:命令行切换