从文本文件中读取数据,解析数据并将其存储在shell脚本中的数组中

时间:2012-04-30 01:56:50

标签: bash parsing shell

我有一个带矩阵的文本文件

A:1,2,3,4

B:2,4,6,8; 1,2,5,6

C:8,6,4,2; 1,2,3,4; 1,3,5,7

我希望在shell脚本中读取此文件,将这些矩阵存储在不同的数组中,然后使用这些数组进行进一步计算(仅限加法和减法)。 这是我的代码:

#! /bin/bash
R=`awk -F'[^0-9]+' '{$1=$1; print;}' testfile.txt`
echo $R;

这给了我这种形式的输出:

1 2 3 4 2 4 6 8 1 2 5 6 8 6 4 2 1 2 3 4 1 3 5 7

我尝试使用循环将这些放在不同的数组中但由于某种原因不起作用。 任何人都可以帮我这个吗?

(我是shell脚本的新手,所以对你的代码解决方案进行一些解释会非常有用。谢谢)

2 个答案:

答案 0 :(得分:1)

编程规则之一是解析输入通常比整个练习的其余部分更难。

要开始使用,您可以尝试在每一行上多次使用cutInternal Field Separator

首先使用:作为分隔符,将数组名称与值分开 然后使用;作为分隔符来分隔行 最后,使用,作为分隔符来获取各个值。

答案 1 :(得分:0)

这将矩阵值存储在数组A,B和C中:

IFS+=,\;
eval `
while read name numbers
do  if [ $name ]
    then    echo "${name%:}=($numbers)"
    fi
done <testfile.txt
`

这将输出不同的数组,仅用于检查目的:

echo ${A[*]}
echo ${B[*]}
echo ${C[*]}

由于bash只提供一维数组,因此我们必须计算一个给定行大小的索引,例如:克。

row=2; col=3
echo ${C[$row*4+$col]}