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
虽然我也希望+ strand记录是否同时具有0,因为稍后我必须在第2列使用仅正链的值。
示例:
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
我有一个类似上面的文件,我正在搜索一些将添加<{p>的awk
命令
[column4 of '+' strand + column5 of '+' strand + column4 of '-' strand + column5 of '-' strand]
这意味着每两行如果它们的总和大于0,则将其打印在文本文件上,否则不打印。但应保留只有1个数字(如3000035和3000037)的备用+
和-
,因为这些只被认为是一条记录。
从上面的例子中,只打印以下记录 - 而不是最后2行:
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值前面的新文件并计算百分比,如
[($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
命令,请向我解释。
答案 0 :(得分:0)
此脚本可让您开始实现目标。
将以下内容放入文件中,例如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.3333