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

如何使用AWK结合通配符按列值过滤CSV数据?

AWK过滤CSV数据的解决方案

问题说明

需要过滤CSV数据,保留满足以下任一条件的行:

  • 第二列以Cu开头,且第三列以S或Te开头
  • 第二列以S或Te开头,且第三列以Cu开头

示例数据:

1          Er6          Te100      7.02455       1   0   0           -0.00420 
      2          Cu7          S150       6.96222       0  -1   0           -0.00421 
      3          Sc8          P50        7.01955       0   0   0           -0.00397 

你尝试的awk '{ if (($2 == "Cu*")) { print } }' file无输出,原因是AWK中==是精确匹配,不支持通配符,需使用正则匹配语法。

解决步骤

1. AWK正则匹配规则

AWK中用~操作符实现正则匹配,^表示字段开头。比如匹配以Cu开头的第二列,写法为$2 ~ /^Cu/。

2. 组合逻辑条件

两个需求条件为或关系,每个条件内部是与关系:

  • 条件1:$2 ~ /^Cu/ && $3 ~ /^(S|Te)/
  • 条件2:$2 ~ /^(S|Te)/ && $3 ~ /^Cu/

3. 完整命令

awk '($2 ~ /^Cu/ && $3 ~ /^(S|Te)/) || ($2 ~ /^(S|Te)/ && $3 ~ /^Cu/) { print }' file

也可以拆分正则写法,效果一致:

awk '($2 ~ /^Cu/ && ($3 ~ /^S/ || $3 ~ /^Te/)) || (($2 ~ /^S/ || $2 ~ /^Te/) && $3 ~ /^Cu/) { print }' file

测试输出

用示例数据运行命令,将输出符合条件的第二行:

2          Cu7          S150       6.96222       0  -1   0           -0.00421 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 14:53:35