Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
awk输出字段相对于长度的百分比_Awk - Fatal编程技术网

awk输出字段相对于长度的百分比

awk输出字段相对于长度的百分比,awk,Awk,下面使用示例输入的awk将输出以下内容:基本上,它将$5中与7

下面使用示例输入的
awk
将输出以下内容:基本上,它将
$5
中与
7<30
匹配的文本取平均值

awk '{if(len==0){last=$5;total=$7;len=1;getline}if($5!=last){printf("%s\t%f\n", last, total/len);last=$5;total=$7;len=1}else{total+=$7;len+=1}}END{printf("%s\t%f\n", last, total/len)}' Input.txt > output.txt
样本输入

chr 1   955542  955763  +   AGRN:exon.1 1   0
chr 1   955542  955763  +   AGRN:exon.1 2   0
chr 1   955542  955763  +   AGRN:exon.1 3   0
chr 1   955542  955763  +   AGRN:exon.1 4   1
chr 1   955542  955763  +   AGRN:exon.1 5   1
chr 1   955542  955763  +   AGRN:exon.1 6   1
....
....
chr 1   955542  955763  +   AGRN:exon.1 218 32
chr 1   955542  955763  +   AGRN:exon.1 219 32
chr 1   955542  955763  +   AGRN:exon.1 220 32
chr 1   955542  955763  +   AGRN:exon.1 221 29
AGRN:exon.1 4.5714285
AGRN:exon.1 4.5714285 3.16742% (221 (# of lines in `6' / 7 #3 of lines `< 30`)
输出

chr 1   955542  955763  +   AGRN:exon.1 1   0
chr 1   955542  955763  +   AGRN:exon.1 2   0
chr 1   955542  955763  +   AGRN:exon.1 3   0
chr 1   955542  955763  +   AGRN:exon.1 4   1
chr 1   955542  955763  +   AGRN:exon.1 5   1
chr 1   955542  955763  +   AGRN:exon.1 6   1
....
....
chr 1   955542  955763  +   AGRN:exon.1 218 32
chr 1   955542  955763  +   AGRN:exon.1 219 32
chr 1   955542  955763  +   AGRN:exon.1 220 32
chr 1   955542  955763  +   AGRN:exon.1 221 29
AGRN:exon.1 4.5714285
AGRN:exon.1 4.5714285 3.16742% (221 (# of lines in `6' / 7 #3 of lines `< 30`)
我的问题是,我似乎无法添加正确的语法来输出
$6
中表示
$5
的行的总数以及
7<30
的百分比。我知道我的话可能没有多大帮助,所以希望所需的输出会有所帮助。谢谢:)

所需输出

chr 1   955542  955763  +   AGRN:exon.1 1   0
chr 1   955542  955763  +   AGRN:exon.1 2   0
chr 1   955542  955763  +   AGRN:exon.1 3   0
chr 1   955542  955763  +   AGRN:exon.1 4   1
chr 1   955542  955763  +   AGRN:exon.1 5   1
chr 1   955542  955763  +   AGRN:exon.1 6   1
....
....
chr 1   955542  955763  +   AGRN:exon.1 218 32
chr 1   955542  955763  +   AGRN:exon.1 219 32
chr 1   955542  955763  +   AGRN:exon.1 220 32
chr 1   955542  955763  +   AGRN:exon.1 221 29
AGRN:exon.1 4.5714285
AGRN:exon.1 4.5714285 3.16742% (221 (# of lines in `6' / 7 #3 of lines `< 30`)
AGRN:exon.1 4.5714285 3.16742%(221行`'6'/7 `<30`/3行)

我认为你的程序不会按你说的做。不管怎样,这可能就是你想要的

$ awk '$8<30{a[$6]+=$7;c[$6]++} 
            {t[$6]++} 
         END{for(i in a) print i,a[i]/c[i],(100*c[i]/t[i])"% ("t[i]" lines)"}' file