我有一个包含5列的文件,我想使用数字范围作为标准来分隔列:示例:
chr1 2120987 2144159 NM_001282670 0.48106
chr1 2123333 2126214 NM_001256946 2.71647
chr1 4715104 4837854 NM_001042478 0
chr1 4715104 4843851 NM_018836 0
chr1 3728644 3773797 NM_014704 4.61425
chr1 3773830 3801993 NM_004402 4.39674
chr1 3773830 3801993 NM_001282669 0
chr1 6245079 6259679 NM_000983 75.1769
chr1 6304251 6305638 NM_001024598 0
chr1 6307405 6321035 NM_207370 0.273874
chr1 6161846 6240194 NM_015557 0.0149477
chr1 6266188 6281359 NM_207396 0
chr1 6281252 6296044 NM_012405 14.0752
我想从列表中删除0,然后想要在0.01到0.27之间排序数字等等.... 我是shell编程的新手....有人可以帮助awk吗? 感谢。
答案 0 :(得分:0)
由于您不熟悉shell编程,因此您可能不了解grep
和sort
这项工作会更简单。
如果你是awk
作为你选择的工具,那么请忽略我的答案。
我会这样做:
grep -v '\s0$' file | sort -k 5,5 -g
chr1 6161846 6240194 NM_015557 0.0149477
chr1 6307405 6321035 NM_207370 0.273874
chr1 2120987 2144159 NM_001282670 0.48106
chr1 2123333 2126214 NM_001256946 2.71647
chr1 3773830 3801993 NM_004402 4.39674
chr1 3728644 3773797 NM_014704 4.61425
chr1 6281252 6296044 NM_012405 14.0752
chr1 6245079 6259679 NM_000983 75.1769
带有grep
的{{1}}会反转搜索并查找不包含序列-v
的行,后跟零后跟行尾。 space
对第5列的数据进行排序,并根据sort
执行常规数字排序。
答案 1 :(得分:0)
如果你试图选择$ 5非零且在一定范围内的行,那么确实awk是有意义的,以下内容可能接近你之后:
awk -v min=0.01 -v max=0.27 '
$5 == 0 { next }
min <= $5 && $5 <= max { print }'
这里,对awk的调用已被参数化,以建议如何调整这几行以用于更一般的用法。