【发布时间】:2014-04-13 15:27:08
【问题描述】:
我试图在包含 n 个字段的行中查找一个字段。字段的数量是可变的,我的目标字段的位置并不总是相同的(即它并不总是像 $4 那样)。我试图想出一个简短的代码来实现“对于范围为 1 到 NF 的字段 $i,如果 $i 包含 /pattern/ print $i”,如下所示,这是行不通的:
awk'{for(i=1;i<=NF;i++)} if ($i~/Start/) {print $i}' <filename>
如果列具有我要进行模式匹配的标签,我将尝试打印一整列。例如,如果列是 /Alt/,我想打印整列。但是如果我事先不知道该字段,如何找到该字段编号然后使用它来打印该字段?以下是表格样本(基因组数据):
Chr Start End Ref Alt Func.refGene Gene.refGene
1 865584 865584 G A exonic SAMD11
1 865628 865628 G A exonic SAMD11
1 865662 865662 G A exonic SAMD11
1 865694 865694 C T exonic SAMD11
1 865700 865700 C T exonic SAMD11
1 865705 865705 C T exonic SAMD11
1 871215 871215 C G exonic SAMD11
1 871229 871229 G C exonic SAMD11
我尝试过这样的事情,但我永远无法让它完全发挥作用:
如果有人介绍了这个,请提前抱歉,我看了很多,没有发现这个问题。我只使用 awk 大约两个星期,二月份才开始编程。非常感谢您的意见!
【问题讨论】:
-
您的代码的所有问题是在
awk和'之间缺少空格,并且在for条件之后有一个虚假的右括号(})。你的 shell 应该告诉你第一个问题,然后 awk 告诉你第二个语法错误,并在你尝试运行它时指出你正确的那个字符。如果这些没有发生,您需要获得一个新的 shell 和/或一个新的 awk。如果这些 DID 发生了,除了您不理解的错误消息之外是什么? -
嗨,埃德——实际上,缺少空间只是我的糟糕、红眼、通宵复制和粘贴工作;)