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

如何用awk筛选CSV中特定字段为空/非空的行?

用Awk过滤CSV行的正确实现方法

需求

需要筛选CSV中满足以下任一条件的行:

  • 第2字段为空(表现为"")且第4字段非空
  • 第2字段非空且第4字段为空

示例输入CSV

"venBio","http://www.venbio.com","","venBio is a Investor located in United States, North America."
"zhenZhou","http://www.zhenzhou.com","",""
"Loren","","","A famous Hollywood actress from the 1950s and 1960s"

期望输出

符合第一个条件的行:

"Loren","","","A famous Hollywood actress from the 1950s and 1960s"

符合第二个条件的行:

"zhenZhou","http://www.zhenzhou.com","",""

问题分析

你之前的命令失效,是因为CSV的空字段实际是带双引号的"",而非空字符串。用,分割后,字段内容包含引号,直接判断$2 == ""会匹配不到目标字段。

正确命令

针对条件1的命令

awk -F, '$2 == "\"\"" && $4 != "\"\""' input.csv

针对条件2的命令

awk -F, '$2 != "\"\"" && $4 == "\"\""' input.csv

如果需要兼容空字段内包含空格的情况(比如" "),可以用正则匹配:

# 条件1:第2字段为空(含仅空格),第4字段非空
awk -F, '$2 ~ /^"[[:space:]]*"$/ && $4 !~ /^"[[:space:]]*"$/' input.csv

# 条件2:第2字段非空,第4字段为空(含仅空格)
awk -F, '$2 !~ /^"[[:space:]]*"$/ && $4 ~ /^"[[:space:]]*"$/' input.csv

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 03:33:25