假设伊夫一排这样的:AWK打印字作为阵列
LOCUS NG_052676 31180 bp DNA linear PRI 08-AUG-2017
正在由match($0, /LOCUS\s*([^\n]*)/, o)
选择和打印由print o[1]
但这选择/打印整排由于空白:
NG_052676 31180 bp DNA linear PRI 08-AUG-2017
如何捕获前两个字符串作为数组o,如此:o [1] = NG_052676和o [2] = 31180?
注:我不想改变FS变量正被用于其他
NB2这是我使用的整个的awk的东西:
BEGIN{RS="//";FS=OFS="|"}
{
match($0, /LOCUS\s*([^\n]*)/, o)
match($0, /\(([^)]+)\)/, a)
match($0, /\/gene="([^"]+)"/, b)
match($0, /\/product="([^"]+)"/, c)
match($0, /\/chromosome="([^"]+)"/, d)
match($0, /\/map="([^"]+)"/, e)
match($0, /Summary:\s([^\[]+)/, f)
print o[1] " ", a[1] " ",b[1] " ", gensub(/\s\s+/, " ", "g1", c[1]) " ",
d[1] " ", e[1] " ",
gensub(/\s\s+/, " ", "g2", f[1])
}
不确定你认为''g1“'和''g2”'可能意味着gensub()参数,但gawk会将它们都视为'“g”'。该参数可以是要匹配的正则表达式匹配的数字,也可以是匹配所有匹配的“g”。 –
感谢您的更正。当我克隆第一个gensub语句时,我想确保变量g不会与先前的语句冲突(awk非常新) – haz
不客气。你真的应该发布一个新的问题,所以我们可以帮助你引导你正确的道路。例如,所有这些匹配行像'match($ 0,/ \/gene =“([^”] +)“/,b)'应该合并成一行,如'match($ 0,/ \ ([[:alpha]] +)=“([^”] +)“/,b){f [b [1]] = b [2]}'然后您可以通过它们名字,例如'print f [“gene”],f [“map”]'。 'FS =“|”''是一个不错的选择。 –