使用 bash 根据特定列选择行,然后计算唯一变体并根据另一列排序

问题描述 投票:0回答:2

我有一个包含基因突变的 tsv 文件

基因 突变
A 错觉
错觉
删除
C 删除
D 删除
沉默
删除

我想:(1)选择具有基因B突变的行(2)计算突变的独特类型(3)计算每种类型的出现并排序。

输出应该是

删除2
错义 1
静音 1

我尝试了以下 bash 命令,但它不起作用:

awk '$1 == B' filename | cut -f2 | sort | uniq | wc -l
bash bioinformatics
2个回答
0
投票

你可以这样做(假设输入在 /var/tmp/IP.tsv 中)

grep '^B\t' /var/tmp/IP.tsv | cut -f2 | sort -u | while read mutation; do \
 echo $mutation $( grep -c "^B\t$mutation\$" /var/tmp/IP.tsv ); \
done

它不是超级优雅-但是....


0
投票

您可以使用

grep -o
来过滤所需的输出,并使用
grep -c
来计算出现次数。

这远不是一个可靠的解决方案,但与您的起点并没有太大不同,应该可以完成工作:

#!/bin/bash
    
for mut in $(grep -o "^B.*" input.tsv | cut -f2 | sort | uniq)
do  
    printf "%s %s\n" $mut $(grep -c "^B.*$mut" input.tsv)
done

输出:

$ ./script.sh 
Deletion 2
Missense 1
Silent 1
© www.soinside.com 2019 - 2024. All rights reserved.