select 来自具有阈值的 awk 文件的列,但打印用户定义的列?
select columns from a file with awk having a threshold but print the user defined column?
我想select下面文件中的前 4 列,其阈值小于第 6 列
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 列。我想 select 没有 header 的前 4 列,但只有那些在第 6 列中的值小于等于 0.05 的列。
我已经计算出我需要的列并且还取消了 header 但是我将如何使用第 6 列的阈值而不是在打印中使用它。我只会打印 ,,,
的 </code> 列值小于等于 0.05.</p>
<p>是否可以使用带有管道的单个 <code>awk
命令来完成此操作?
我会把它翻译成:
awk 'NR>1 && <0.05 {NF=4; print}' file
哪个returns:
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
如果第 6 个值低于 0.05
,这会从第 2 行获取所有行。如果是这样,它将通过将 NF
(字段数)设置为 4
来删除额外的列。然后,它打印行。
请注意,您可以像这样将其管道美化为 column -t
(感谢 Glenn 的评论!):
$ awk 'NR>1 && <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
到select前四列 $6<=0.05
awk '{if(<=0.05){print ,,,}}' 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
我想select下面文件中的前 4 列,其阈值小于第 6 列
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 列。我想 select 没有 header 的前 4 列,但只有那些在第 6 列中的值小于等于 0.05 的列。
我已经计算出我需要的列并且还取消了 header 但是我将如何使用第 6 列的阈值而不是在打印中使用它。我只会打印 ,,,
的 </code> 列值小于等于 0.05.</p>
<p>是否可以使用带有管道的单个 <code>awk
命令来完成此操作?
我会把它翻译成:
awk 'NR>1 && <0.05 {NF=4; print}' file
哪个returns:
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
如果第 6 个值低于 0.05
,这会从第 2 行获取所有行。如果是这样,它将通过将 NF
(字段数)设置为 4
来删除额外的列。然后,它打印行。
请注意,您可以像这样将其管道美化为 column -t
(感谢 Glenn 的评论!):
$ awk 'NR>1 && <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
到select前四列 $6<=0.05
awk '{if(<=0.05){print ,,,}}' 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