在读取文件bash时将分词存储到数组中

时间:2014-03-13 07:38:54

标签: arrays linux bash

我有一个包含逗号多个单词的文件。我想读取一个文件并将这些单词存储到数组中。在此文件中,第一行是标题,其他行是基准。但是一些数据是null。因此,这个空字符需要为0例如;

H1;H2;H3;H4   
12;23;33;44   
44;;7;8   
13;;;9  

所以我想跳过第一行并将数据放入4 array =>

H1 array= 12;44;13  
H2 array= 23;0;0  
H3 array= 33;7;0  
H4 array= 44;8;9  

所以我的代码是这样的:

array=()
awk 'NR>1' $filename2 | while read line
do
    cntr=0
    IFS=";"
    for i in $line; do
        if [ -z $i ]; then array[cntr]=0; 
           else array[cntr]=$i;
        fi
    cntr=$[$cntr +1]
    done
    h1array+=("${array[0]}")
    h2array+=("${array[1]}")
    h3array+=("${array[2]}")
    h4array+=("${array[3]}")
done
for ((i=0;i<3;i++)); do
    echo "${h1array[$i]}"
done
for ((i=0;i<3;i++)); do
    echo "${h2array[$i]}"
done
for ((i=0;i<3;i++)); do
    echo "${h3array[$i]}"
done
for ((i=0;i<3;i++)); do
    echo "${h4array[$i]}"
done

因此,它在终端中输出null。我怎样才能做到这一点?谢谢

1 个答案:

答案 0 :(得分:3)

这就是你想要的吗?

#!/bin/bash

while read -r line; do
        [[ "${line}" == *';'* ]] || continue
        IFS=';' read -r h1 h2 h3 h4 <<< "${line}"
        h1array+=("${h1:-0}")
        h2array+=("${h2:-0}")
        h3array+=("${h3:-0}")
        h4array+=("${h4:-0}")
done < <(tail -n +2 input.txt)

echo "h1array = ${h1array[@]}"
echo "h2array = ${h2array[@]}"
echo "h3array = ${h3array[@]}"
echo "h4array = ${h4array[@]}"

$ ./t.sh
h1array = 12 44 13
h2array = 23 0 0
h3array = 33 7 0
h4array = 44 8 9