从awk具有阈值的文件中选择列,但是否打印用户定义的列?

从awk具有阈值的文件中选择列,但是否打印用户定义的列?,awk,grep,Awk,Grep,我想从下面的文件中选择阈值小于第6列的前4列 chr start end copy number status WilcoxonRankSumTestPvalue KolmogorovSmirnovPvalue 1 761750 7202499 3 gain 5.13822497072701e-298 0 1 7289250 7289999 7 gain 0.014309298726355 0.0366367750948455 2 986117

我想从下面的文件中选择阈值小于第6列的前4列

chr start   end copy number status  WilcoxonRankSumTestPvalue   KolmogorovSmirnovPvalue
1   761750  7202499 3   gain    5.13822497072701e-298   0
1   7289250 7289999 7   gain    0.014309298726355   0.0366367750948455
2   98611750    98612249    6   gain    0.0332886037857768  0.270077169105485
2   113816500   114398999   3   gain    3.96934332204917e-17    5.55111512312578e-15
2   121103500   122122749   3   gain    1.00740734942511e-17    4.25659507641285e-13
2   128322500   128471749   3   gain    7.89316303630306e-28    0
2   218620500   219303499   3   gain    0.00830885602834e-56    0
2   220084750   220085249   6   gain    0.0232886037857768  0.270077169105485
2   220085250   220506749   3   gain    5.22993652708892e-114   0
该文件包含7列。我想选择不带标题的前4列,但只选择第6列中的值小于等于0.05的列

我已经计算出了我需要的列,也去掉了标题,但是我如何在第6列使用阈值,而不是在打印中使用它。我只打印
$1、$2、$3、$4
,其中
$6
列值小于等于0.05


有没有可能用一个带有管道的
awk
命令来执行此操作?

我将其转换为:

awk 'NR>1 && $6<0.05 {NF=4; print}' file
如果第2行的第6个值低于
0.05
,则从第2行获取所有行。如果是,则通过将
NF
(字段数)设置为
4
来删除额外的列。然后,它打印该行

注意,您可以像这样将其预处理到
列-t
(感谢Glenn的评论!)


$awk'NR>1&&$6选择$6的前四列这对我也适用。我已经下达了命令<代码>awk-v OFS='\t'{如果($6)知道输出应该是什么样子有点复杂。你能交叉检查一下列和行的意思吗?提供你想要的输出就可以了。输出应该是前4列,其第6列的值小于0.05。试试我的命令它可以工作。@fedorqui,他只想要
NF=4
$6正是这样@fedorqui应该修改的命令
awk'NR>1&&$6是的,即使这个命令工作得很好,除了我还引入了制表符delimeters,因为我需要将它保存在不同的文件格式中。如果您看到我使用的命令,那么您将看到输出。
1 761750 7202499 3
1 7289250 7289999 7
2 98611750 98612249 6
2 113816500 114398999 3
2 121103500 122122749 3
2 128322500 128471749 3
2 218620500 219303499 3
2 220084750 220085249 6
2 220085250 220506749 3
$ awk 'NR>1 && $6<0.05 {NF=4; print}' file | column -t
1  761750     7202499    3
1  7289250    7289999    7
2  98611750   98612249   6
2  113816500  114398999  3
2  121103500  122122749  3
2  128322500  128471749  3
2  218620500  219303499  3
2  220084750  220085249  6
2  220085250  220506749  3
awk '{if($6<=0.05){print $1,$2,$3,$4}}' file
1 761750 7202499 3
1 7289250 7289999 7
2 98611750 98612249 6
2 113816500 114398999 3
2 121103500 122122749 3
2 128322500 128471749 3
2 218620500 219303499 3
2 220084750 220085249 6
2 220085250 220506749 3