awk - 如何忽略通配符匹配?

Bha*_*t G 1 awk

我想根据第三列值处理一个 csv 文件并将匹配的行保存到一个单独的文件中。

#!/bin/bash awk -F, '$3 ~ /0/ {print}' ./inputfile.csv > ./out/output.csv

我想要的只是第 0 列中的 0 值,但使用上述命令,输出文件包含第 3 列值 0 、 10 、 20 、 100 等。(其中包含 0 的任何值)。

如何告诉 awk 忽略通配符匹配并仅在第 3 列中使用绝对 0 值?

Chr*_*own 8

你可以这样做:

awk -F, '$3 == "0"' ./inputfile.csv > ./out/output.csv
Run Code Online (Sandbox Code Playgroud)

~是模式匹配,在这里你不想要。==匹配文字字符串“0”,没有别的。我还删除了该print语句,因为如果您不提供代码块,则暗示了它。

您也可以考虑使用真正的 CSV 解析库,因为语法可能比逗号更复杂(例如,处理引用和转义)。

  • 请注意,`$3 == "0"` 只会匹配`0`,使用`$3 == 0` 也匹配`00` 或`0.0` 或`0e2`,或者(取决于awk 实现)` 0x0`。使用 `!$3` 与 `$3 == 0` 和空字符串相同。在任何情况下,都不会匹配`"0"`(0 被引号包围)。 (5认同)