将文件转换为 bash 中的二维数组
Converting file to 2d array in bash
我正在做一个项目,我将一些数据保存到一个文件中 (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
循环的末尾指定,在 done
关闭循环后附加 < data.txt
。
您可以设置 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
我正在做一个项目,我将一些数据保存到一个文件中 (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
循环的末尾指定,在 done
关闭循环后附加 < data.txt
。
您可以设置 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