如果$ i~ / pattern / print $ i,我在范围NF中为awk

时间:2014-04-13 06:29:03

标签: regex awk

我试图在包含n个字段的行中找到一个字段。字段的数量是可变的,我的目标字段的位置并不总是相同(即它不总是像$ 4)。我试图想出一个短代码来实现"对于$ 1范围内的字段$ i到NF,如果$ 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大约两个星期,并且刚刚在2月开始编程。非常感谢您的投入!

1 个答案:

答案 0 :(得分:3)

也许这应该做:

awk 'NR==1 {for(i=1;i<=NF;i++) if ($i~/Alt/) f=i;next} {print $f}' file
A
A
A
T
T
T
G
C

它会在行Alt中搜索1的位置,然后将此位置存储在f中 找到后,它将打印f

中存储的列中的数据