bash - 在bash中将文件转换为二维数组

标签 bash shell solaris

我正在做一个项目,我将一些数据保存到一个文件 (data.txt) 中。

10010101010;99;18767654536;252525
89878337326;44;18764329087;242424

下一步是将该数据读入二维数组,其中 row[0] 是第一行,row[1] 是第二行。我正在努力实现这个目标。此外,我也希望能够访问每一行的各个元素

我目前有这段代码,但它只打印第一行,我无法访问元素

read -a rows < data.txt                                          
for row in "${rows[@]}";do                                                      
  row_array=(${row})                                                            
  first=${row_array[0]} 
  sec=${row_array[1]}                                                        
  echo ${first}
  echo ${sec}                                                                 
done

最佳答案

根据您的评论,它看起来像一个简单的 while read循环是你需要的:

while IFS=';' read -r id rest; do
    if [[ "$id" == "10010101010" ]]; then
        echo "Matching line : $id $rest"
    fi
done < data.txt

在此代码中 IFS=';'指定使用 ;字符作为命令的内部字段分隔符 read ,这将使它把你的每一行解析为四个不同的词。

read -r 之后的名称对应于用于存储这些单词中的每一个的变量,如果单词多于变量,则最后一个包含该行的其余部分。
read -r id rest将第一列存储在 $id 中变量和剩下的词变成$rest , 而 read -r first second third fourth会将每个单词存储在它自己的变量中。

read 的输入命令在 while 的末尾指定循环附加 < data.txtdone之后关闭循环。

关于bash - 在bash中将文件转换为二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55144651/

相关文章:

c - 查找特定进程的子进程 (UNIX)

linux - 将 linux 连接到 solaris 时,ssh 命令不起作用

linux - RVM 源作为 sudo?

bash - 使用 bash、sed、awk 解析 .ini 等文件

linux - 如何跳过文件的第一行并读取剩余行作为 C 程序的输入?

python - Solaris python setuptools 安装

linux - Ansible 执行脚本不起作用

linux - for循环和带空格的文件

c - 用C在linux上记录命令行输入输出

linux - 如何使用重定向和管道制作 bash 命令字符串?