chr1 3000035 + 0 0 CHG CTG
chr1 3000037 - 0 0 CHG CAG
chr1 3000045 + 0 0 CHG CAG
chr1 3000047 - 0 0 CHG CTG
chr1 3000048 + 0 0 CHG CTG
chr1 3000050 - 0 0 CHG CAG大多数数据如下所示:如何忽略此错误。
我对awk很陌生,不知道怎么做。用于数据集T-C.txt
chr1 3000035 + 0 0 CHG CTG
chr1 3000037 - 0 1 CHG CAG
chr1 3000045 + 0 0 CHG CAG
chr1 3000047 - 0 0 CHG CTG
chr1 3000048 + 3 0 CHG CTG
chr1 3000050 - 0 0 CHG CAG
chr1 3000109 + 0 0 CHG CAG
chr1 3000111 - 0 0 CHG CTG剧本:
less T-C.txt | awk '{sum=sum+$4+$5} {if(sum>0) print;} (NR%2==0) {sum=0;}'产生以下的输出:
chr1 3000037 - 0 1 CHG CAG
chr1 3000048 + 3 0 CHG CTG
chr1 3000050 - 0 0 CHG CAG虽然我也希望+链记录这两个值是否都是0,因为以后我只能在第二列使用正的字符串的值。
示例:
chr1 3000035 + 2 1 CHG CTG
chr1 3000037 - 0 3 CHG CAG
chr1 3000045 + 0 0 CHG CAG
chr1 3000047 - 0 1 CHG CTG
chr1 3000048 + 0 0 CHG CTG
chr1 3000050 + 0 0 CHG CTG我有一个类似于上面的文件,我正在搜索一些awk命令,它将添加
[column4 of '+' strand + column5 of '+' strand + column4 of '-' strand + column5 of '-' strand]这意味着每2行,如果它们之和大于0,那么就在文本文件上打印,否则不要打印。但是,只有3000035和3000037这样的数字差的备用+和-应该保持不变,因为它们被认为只是一个记录。从上面的示例中,将只打印以下记录(最后2行的- not):
chr1 3000035 + 2 1 CHG CTG
chr1 3000037 - 0 3 CHG CAG
chr1 3000045 + 0 0 CHG CAG
chr1 3000047 - 0 1 CHG CTG之后,我要在+ strand值前面打印一个新文件的sum,并计算如下所示的百分比
[($4/$4+$5)*100 of '+'strand +($4/$4+$5)*100 of -strand]/2其结果将是:
chr1 3000035: sum= 6 percentage=['+strand'=66.66+'-strand'=0]/2=33.33%
chr1 3000035 6 33.33这应该只打印到文件中。如果有人知道awk命令,请解释给我听。
发布于 2016-04-30 08:15:47
这个脚本应该让你开始朝着你的目标前进。
将以下内容放入一个文件中,比如script.awk
$ cat script.awk
NR % 2 == 0 && sum {
sum += $4 + $5;
avg = ($4 / ($4 + $5)) * 100;
if (sum > 0) {
print prev, sum, (avg + pavg) / 2
}
}
NR % 2 {
prev = $1 FS $2;
sum = $4 + $5;
if (sum == 0) {
next;
}
pavg = ($4 / ($4 + $5)) * 100
}$ awk -f script.awk file
chr1 3000035 6 33.3333https://stackoverflow.com/questions/36948934
复制相似问题