Linux中awk命令执行报错:syntax error at or near '}' 求助
解决awk提取CDS区域的语法错误问题
报错原因
你使用的match($0, /pattern/, arr)语法是GNU awk(gawk)专属的扩展功能,如果系统默认的awk是其他版本(如BSD awk、mawk),这些版本不支持match()的第三个数组参数,就会触发语法错误。
解决方案
方案1:用GNU awk执行命令
直接将命令中的awk替换为gawk(先通过gawk --version确认系统已安装):
gawk '/CDS/ && /\.\./ { if (match($0, /([0-9]+)\.\.([0-9]+)/, arr)) { print arr[1], arr[2] } }' BRCA1.gb
方案2:兼容标准awk的写法
如果无法使用gawk,可借助split()配合match()的标准返回值实现需求:
awk '/CDS/ && /\.\./ { # 匹配数字区间的完整部分 if (match($0, /[0-9]+\.\.[0-9]+/)) { # 提取匹配到的区间字符串 range_str = substr($0, RSTART, RLENGTH) # 按".."分割字符串为数组 split(range_str, pos_arr, /\.\./) # 输出起始和终止位置 print pos_arr[1], pos_arr[2] } }' BRCA1.gb
内容的提问来源于stack exchange,提问作者Luka Jašović
相关产品推荐
相关产品推荐

