假設伊夫一排這樣的: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 =「|」''是一個不錯的選擇。 –