在 csv 文件中匹配文本,在前 X 行和最后 X 个结果中,并在 Lua 中获得一个值

我正在将 Bash 脚本翻译为 Lua 程序。 在 Bash 脚本中有一行:

mapfile -t vol < <( cat csv_file | head -$id | grep locateme | tail -3 | cut -f6 -d\,)

此操作的结果是:

vol[0]=22
vol[1]=33
vol[2]=44

csv_file 的格式如下:

16,a,b,c,d,9,16,0,3,65,0,0,locateme
16,a,b,c,d,11,16,0,3,65,0,0,notme
16,a,b,c,d,22,16,0,3,65,0,0,locateme
16,a,b,c,d,33,16,0,3,65,0,0,locateme
16,a,b,c,d,32,16,0,3,65,0,0,notme
16,a,b,c,d,44,16,0,3,65,0,0,locateme

我需要一个与 Bash 相同的表:

vol[1]=22
vol[2]=33
vol[3]=44

请,我不知道该如何开始

原文链接 https://stackoverflow.com/questions/70183025

点赞
stackoverflow用户2858170
stackoverflow用户2858170

你将会使用 Lua table 而不是 Bash array。

local vol = {}

你需要用到 generic for 循环file:lines(...) 迭代器。阅读整个 io 库 是个好主意。

这样可以让你以字符串的形式获取 csv 文件的每一行并进一步处理。

现在需要用到 Lua 的 string 库。有多种方法可以实现。一种选择是使用另一个 generic for 循环,加上 string.gmatch 和一个适当的字符串模式来捕获你感兴趣的值。

2021-12-01 12:08:52