我有以下幾點:AWK匹配()多個匹配
echo AS:i:0 UQ:i:0 ZZ:Z:mus.sup NM:i:0 MD:Z:50 ZZ:Z:cas.sup CO:Z:endOfLine|awk '{match($0,/ZZ:Z[^ ]*/,m); print m[0], m[1]}'
不幸的是只輸出第一項(出2):
ZZ:Z:mus.sup
在我看來這門親事()函數不能在其數組中存儲多個匹配項。除非我在這裏錯過...?
如果確實如此,有人會好好建議一個基於awk的「匹配」替代方案,以便獲得兩個ZZ:Z條目。請注意,這些不是每次都位於同一列(!) - 因此需要使用match()函數。
這裏的一般想法是在相同的awk命令中獲得一些出現在已知列位置(例如col1,col2)的值和一些值(基於它們的唯一簽名「ZZ:Z」獲取),位於未知的索引列。
此外,以下嘗試 - 使用gensub()也沒有輸出/打印兩個ZZ位:Z的條目,並且僅識別兩個中的一個(並且在倒數的棄用的另一個..)
echo AS:i:0 UQ:i:0 ZZ:Z:mus.sup NM:i:0 MD:Z:50 ZZ:Z:cas.sup CO:Z:endOfLine|awk '{val= gensub(/.*(ZZ:Z[^ ]*).*/,"\\1 \\2","g",$0);print val}'
結果在這種情況下是:
ZZ:Z:cas.sup
,但我想有作爲的結果:
ZZ:Z:mus.sup ZZ:Z:cas.sup
你能否檢查一下你的解決方案,這可能只是在我的最後一個問題,但我得到一個錯誤信息: 「awk:致命:4是無效的作爲拆分參數的數量」 – Roy
您需要使用GNU awk 4.0或更近期。如果您使用的版本比以前版本要高,那麼您需要儘快更新,因爲4.0版本已經存在了5年以上(2011年6月發佈了4.0.0,現在版本爲4.1.4!),並且您錯過了噸非常有用的功能和錯誤修復(請參閱https://www.gnu.org/software/gawk/manual/gawk.html#Feature-History) –