You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用awk匹配第1列开头2字符与第2列第5、6位字符

匹配列指定位置字符的awk实现方案

原代码问题说明

你写的脚本存在3个核心问题:

  • 语法不规范:判断$2!=""和后续赋值语句没有分隔,awk无法正确识别逻辑分支
  • 截取逻辑错误:你需要的是第2列固定位置的第5、6位字符,不需要通过长度倒推位置,且substr参数使用错误
  • 正则匹配逻辑错误:/^str/是匹配字面量字符串"str",无法匹配你定义的str变量内容

正确实现代码

因为你备注第2列BIC码长度固定为11位,直接按固定位置截取即可,不需要动态计算长度,代码如下:

awk 'BEGIN{FS=OFS="|"} $2 != "" {
    prefix1 = substr($1, 1, 2)
    bic_part = substr($2, 5, 2)
    if (prefix1 == bic_part) print
}' file

逻辑说明

  • BEGIN{FS=OFS="|"}:设置输入、输出字段分隔符均为|,保证输出格式和输入一致
  • $2 != "":提前过滤第2列为空的无效行,减少不必要的计算
  • substr($1, 1, 2):从第1列第1位开始截取2个字符,拿到第1列开头的2个字符
  • substr($2, 5, 2):从第2列第5位开始截取2个字符,正好拿到BIC码的第5、6位
  • 两个截取结果相等时打印整行,即可得到匹配的记录

运行结果

传入你提供的测试文件,执行后输出和期望完全一致:

CZ987876654534|HDFCCZPXXXX|Czech Republic|1243765
LU987876986576|BSUILUPXXXX|Australia|8765

补充说明:如果后续需要用awk正则匹配变量内容,不能直接把变量写在//正则常量里,需要写成$1 ~ "^" str的形式,不过当前场景直接做字符串相等判断,比正则匹配效率更高,也不会出现特殊字符转义问题。

内容的提问来源于stack exchange,提问作者Nadia Alice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:36:18