如何通过Shell脚本读取输入并在CSV文件中检索输出对应详情
Shell 脚本实现CSV检索匹配功能方案
功能说明
实现读取用户输入的检索值,在指定CSV文件中匹配对应字段,输出匹配项的其他关联信息。
预设适配说明
默认适配你提供的参考脚本对应的cars.csv规则:
- CSV字段分隔符为分号
; - 前2行为表头,从第3行开始是有效数据
- 示例默认匹配第9列「产地」字段,输出第2列「MPG」和第9列「产地」信息
你可以根据自己的CSV格式调整对应参数。
优化后可直接使用的脚本
#!/bin/bash clear # 读取用户输入的检索值 read -p "请输入要检索的内容:" search_val # ========== 以下参数可根据你的CSV实际情况自定义修改 ========== csv_file="cars.csv" # 你的CSV文件实际路径 delimiter=";" # CSV字段分隔符,逗号分隔就改为"," skip_header_lines=2 # 需要跳过的表头行数,无表头则填0 match_column=9 # 要匹配的字段序号(从左到右从1开始计数) # ========================================================== # 检索+输出逻辑,无需创建临时文件,大文件也能高效处理 awk -F "$delimiter" \ -v skip_lines="$skip_header_lines" \ -v match_col="$match_column" \ -v input_val="$search_val" ' # 跳过指定行数的表头 NR > skip_lines { # 匹配到对应字段值相等时输出信息 if ($match_col == input_val) { print "===== 匹配结果 =====" print "MPG: " $2 print "产地: " $9 # 需输出其他字段直接加行即可,格式为 print "字段说明: " $字段序号,比如 print "气缸数: " $3 } }' "$csv_file"
原有参考脚本的问题说明
你提供的原有脚本采用逐行循环读取、生成临时文件的方式,处理大体积CSV时效率很低,优化后的脚本直接用awk处理数据流,不需要生成临时文件,执行效率更高。
内容的提问来源于stack exchange,提问作者Ruth Mary Thannikuzhuppil
相关产品推荐
相关产品推荐

