使用 AWK 按列值过滤 csv 数据,并使用通配符

问题描述 投票:0回答:1

我有一个 csv 文件,其中包含诸如

之类的行
      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 来过滤数据并显示行

  1. 第二列的值为 Cu*,第三列的值为 S* 或 Te*

  1. 第二列的值为 S* 或 Te*,第三列的值为 Cu*

到目前为止,我正在从最简单的形式构建命令,并陷入

awk '{ if (($2 == "Cu*")) { print } }' file

这不会输出任何内容。 AWK 似乎不将“Cu*”识别为通配符,因此没有匹配项。

我也不确定如何传递包含两个 and 语句的 OR 语句。

非常感谢您的帮助。

awk wildcard
1个回答
0
投票

您可以将所有条件组合成单一表达式:

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

      2          Cu7          S150       6.96222       0  -1   0           -0.00421
© www.soinside.com 2019 - 2024. All rights reserved.