AWK Curly Braces无效

时间:2016-08-31 02:13:53

标签: awk

尝试根据一些文档(linky)运行awk命令。

但是,每当我在awk命令中添加{1}或{2}时,如文档所述(参见上面的链接或下面的示例),我的搜索就会停止工作。即使在巨大的千兆字节文件上也会出现零结果。有什么建议吗?

这些工作

awk '($3=="+" &&  $4~/^CG/)' example
awk '($3=="+" &&  $4~/..CG/)' example
awk '($3=="+" &&  $4~/.CG/)' example
awk '($3=="+" &&  $4~/^..CG/)' example

这些不会返回任何内容(即使是3 GB的文件)

awk '($3=="+" &&  $4~/.{2}CG/)' example
awk '($3=="+" &&  $4~/.{1}CG/)' example
awk '($3=="+" &&  $4~/^.{2}CG/)' example

根据文档的完整命令:

awk '($3=="-" && $4~/^.{1}CG/ ) || ($3=="+" &&  $4~/^.{2}CG/)' BSMAPexample.txt > CpG.txt

示例数据集

编辑(当我进入堆叠交换时,柱子已经消失,TYPO固定)

  

chr pos strand context ratio total_C methy_C CI_lower CI_upper

     

chr1 3121589 + CGCGT 0.000 56 0 0.000 0.064

     

chr1 3121597 + ATCGG 0.000 56 0 0.000 0.064

     

chr1 3121599 + GTCGT 0.000 56 0 0.000 0.064

     

chr1 3121605 + CTCGG 0.000 56 0 0.000 0.064

     

chr1 3121606 + TGCGC 0.000 56 0 0.000 0.064

     

chr1 3121607 + GGCGC 0.000 56 0 0.000 0.064

     

chr1 3121611 + CTCGA 0.000 56 0 0.000 0.064

     

chr1 3121614 + TACGC 0.000 56 0 0.000 0.064

     

chr1 3121631 + CTCGT 0.000 56 0 0.000 0.064

2 个答案:

答案 0 :(得分:3)

您已从原始样本数据中删除了一些列。

这是您发送的链接中的原始数据:

LPDISPATCH lpDisp;
m_webBrowser->get_Document(&lpDisp);
lpDisp->QueryInterface(IID_IHTMLDocument2,(void**)&m_htmlDocument);
m_htmlDocument->put_charset(L"utf-8");
_variant_t rl=1L;   
m_webBrowser->Refresh2(&rl); 

这是您发布的示例数据:

chr  pos     strand context ratio total_C methy_C CI_lower CI_upper
chr1 3121589 +      CGCGT   0.000 56      0       0.000    0.064
chr1 3121597 +      ATCGG   0.000 56      0       0.000    0.064
chr1 3121599 +      GTCGT   0.000 56      0       0.000    0.064

对于这样的表达式,这是一个问题:

chr  pos     strand context ratio total_C methy_C CI_lower CI_upper
chr1 3121589 CGCGT  0.000   56    0       0.000 0.064
chr1 3121597 ATCGG  0.000   56    0       0.000 0.064
chr1 3121599 GTCGT  0.000   56    0       0.000 0.064

期望第三列中的+符号(awk '($3=="+" && $4~/.{2}CG/)' example ,数据中不存在)和第四列中的一些CG重复($3似乎位于第3位)。它不会匹配您文件中的任何行。

如果您修改表达式以引用正确的列($4)并忘记+号,因为它没有出现在您的数据中,您将匹配文件中的行。

$3

实际上示例文件中的所有行在CG(** CG *)之前都有2个字符。只会跳过标题。

答案 1 :(得分:0)

问题解决了。我用过gawk和--posix

gawk --posix '($3=="-" && $4~/^.{1}CG/ ) || ($3=="+" &&  $4~/^.{2}CG/)'

现在工作得很好。