首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >特定列上连续行的awk和

特定列上连续行的awk和
EN

Stack Overflow用户
提问于 2016-04-29 23:25:12
回答 1查看 652关注 0票数 1
代码语言:javascript
复制
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

代码语言:javascript
复制
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

剧本:

代码语言:javascript
复制
less T-C.txt | awk '{sum=sum+$4+$5}  {if(sum>0) print;} (NR%2==0) {sum=0;}'

产生以下的输出:

代码语言:javascript
复制
chr1    3000037 -   0   1   CHG CAG
chr1    3000048 +   3   0   CHG CTG
chr1    3000050 -   0   0   CHG CAG

虽然我也希望+链记录这两个值是否都是0,因为以后我只能在第二列使用正的字符串的值。

示例:

代码语言:javascript
复制
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命令,它将添加

代码语言:javascript
复制
[column4 of '+' strand + column5 of '+' strand + column4 of '-' strand + column5 of '-' strand]

这意味着每2行,如果它们之和大于0,那么就在文本文件上打印,否则不要打印。但是,只有3000035和3000037这样的数字差的备用+-应该保持不变,因为它们被认为只是一个记录。从上面的示例中,将只打印以下记录(最后2行的- not):

代码语言:javascript
复制
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,并计算如下所示的百分比

代码语言:javascript
复制
[($4/$4+$5)*100 of '+'strand +($4/$4+$5)*100 of -strand]/2

其结果将是:

代码语言:javascript
复制
chr1    3000035: sum= 6 percentage=['+strand'=66.66+'-strand'=0]/2=33.33%
chr1    3000035 6 33.33

这应该只打印到文件中。如果有人知道awk命令,请解释给我听。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-30 08:15:47

这个脚本应该让你开始朝着你的目标前进。

将以下内容放入一个文件中,比如script.awk

代码语言:javascript
复制
$ 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
}
代码语言:javascript
复制
$ awk -f script.awk file
chr1 3000035 6 33.3333
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36948934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档