如何将处理CSV文件的bash脚本转写为Lua代码并生成对应结果表
Lua 实现等效Bash逻辑的方案
原Bash命令逻辑拆解
- 读取
csv_file的前$id行 - 过滤出包含
locateme的行 - 取过滤结果的最后3行
- 按逗号分割每行,取第6个字段
- 输出为数组,Lua中需转换为下标从1开始的表
实现代码
-- 传入参数:csv文件路径、$id对应的数值 function get_vol(csv_path, id) local vol = {} local matched = {} -- 暂存所有匹配locateme的字段值 local line_count = 0 -- 打开文件 local f = io.open(csv_path, "r") if not f then return vol end for line in f:lines() do line_count = line_count + 1 -- 只处理前id行 if line_count > id then break end -- 过滤包含locateme的行 if line:find("locateme") then -- 按逗号分割取第6个字段 local field_idx = 0 for field in string.gmatch(line, "[^,]+") do field_idx = field_idx + 1 if field_idx == 6 then -- 可根据需求选择是否转为数字类型 table.insert(matched, tonumber(field)) break end end end end f:close() -- 取最后3个匹配结果,生成下标从1开始的vol表 local start = #matched - 2 start = start < 1 and 1 or start -- 兼容匹配结果不足3个的场景 for i = start, #matched do table.insert(vol, matched[i]) end return vol end -- 示例调用:对应你提供的测试场景id=6 local vol = get_vol("csv_file", 6) -- 输出验证:vol[1]=22、vol[2]=33、vol[3]=44 for i, v in ipairs(vol) do print(i, v) end
效果说明
你给出的示例中当id=6时,符合筛选条件的字段值依次为9、22、33、44,取最后3个正好得到你需要的结果,下标默认从1开始符合Lua表的使用习惯。
内容的提问来源于stack exchange,提问作者Juanmol
相关产品推荐
相关产品推荐

