在bash中将文件转换为2d数组

时间:2019-03-13 14:44:26

标签: bash shell solaris

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

<template>
    <div> Test</div>
</template>
<script>
   export default {

   }
</script

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

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

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

2 个答案:

答案 0 :(得分:3)

在您发表评论之后,您需要一个简单的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.txt后在done循环的末尾指定。

答案 1 :(得分:3)

您可以设置internal field separator (IFS)变量。内部字段分隔符(缩写为IFS)是指一个变量,该变量定义一个或多个字符,用于将某些模式中的模式分成标记。 它将解析由;分隔的一行项目,并将其推入数组DATA中。

#!/bin/bash
while IFS=\; read -ra DATA; do
  for i in "${DATA[@]}"; do
    echo -e "$i"
  done
  echo
done

示例脚本将产生以下输出:

10010101010
99
18767654536
252525

89878337326
44
18764329087
242424