我有一个名为test.txt的文件,其中包含一些数据,如下所示:
*************************** 19. row ***************************
created_at: 2018-07-02 19:57:58
deleted_at: 2018-07-03 14:17:05
serial_num: 1269043217201
*************************** 20. row ***************************
created_at: 2018-07-02 19:57:58
deleted_at: 2018-07-03 14:17:05
serial_num: 1269043217202
我需要将所有序列号存储在一个数组中。我已经尝试了一些基本的打印方法:
filename="test.txt"
c=0
while read -r line
do
echo $line | grep serial_num | sed -n -e 's/serial_num: //p'
done < "$filename"
这将打印出看起来不错的数据:
1280521737734
1280521737735
1280521737736
但是当我添加
sn=(echo $line | grep serial_num | sed -n -e 's/serial_num: //p')
echo $sn
这也开始打印空白行。我该如何避免呢? 还要这样做
servs[$c] = $sn
c=$(expr $c + 1)
返回
./test.sh: line 138: servs[0]: command not found
./test.sh: line 138: servs[1]: command not found
./test.sh: line 138: servs[2]: command not found
答案 0 :(得分:0)
假设bash 4.0或更高版本:
readarray -t sn < <(awk '/serial_num:/ { print $2 }' <"$filename")
declare -p sn # print array content
使用旧版本:
sn=( )
while read -r line; do sn+=( "$line" ); done < <(awk '/serial_num:/ { print $2 }' <"$filename")
declare -p sn # print array content
使用较旧的发行版,并且使用纯/本地bash:
sn=( )
while IFS=$' \t\n' read -r key val; do
[[ $key = serial_num: ]] && sn+=( "$val" )
done <"$filename"
declare -p sn