我有以下几点: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) –