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

如何用Bash脚本从CSV提取关键词行并在Zenity中按列展示

解决Zenity展示CSV匹配行的列拆分问题

修正后的完整脚本

#!/bin/bash
path="filename.csv"

# 获取用户输入的关键词
ans=$(zenity --entry --title="输入关键词" --text="请输入要搜索的关键词(仅匹配第一列)" --timeout=10)
# 处理用户取消/超时的情况
if [ -z "$ans" ]; then
    exit 0
fi

# 精准匹配第一列、转换分隔符并传入Zenity
awk -v keyword="$ans" -F ',' '
    # 保留CSV表头
    NR == 1 { print $0 }
    # 匹配第一列包含关键词的数据行
    NR > 1 && $1 ~ keyword { print $0 }
' "$path" | tr ',' '\t' | zenity --list \
    --title="搜索结果" \
    --text="第一列包含关键词'$ans'的内容" \
    --multiple \
    --separator=" " \
    --column="列1标题" \
    --column="列2标题" \
    --column="列3标题" \
    --width 800 \
    --height 200

关键问题修复说明

  1. 精准匹配第一列:
    原脚本用grep会全局匹配关键词,可能命中非第一列的内容。改用awk的$1 ~ keyword,只检查第一列是否包含目标关键词,确保匹配准确性。

  2. 解决列拆分错误:
    Zenity的--list默认以空格作为列分隔符,而CSV用逗号分隔。通过tr ',' '\t'将逗号替换为制表符,Zenity会自动识别制表符并将内容拆分到对应列,避免整行内容重复填充到每一列的问题。

  3. 修复脚本语法问题:
    原脚本的函数定义缺少函数名且写法不规范,直接通过管道串联处理逻辑更简洁,同时增加了用户取消输入或超时的退出逻辑,避免无意义的后续执行。

  4. 保留表头展示:
    通过NR == 1保留CSV的表头行,让搜索结果的列对应关系更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:05:29