我有一堆来自以下命令的输出:
metastat |egrep 'Submirror|State|d' |egrep -v 'Read|Write|c|Reloc'输出如下:
d15: Mirror
Submirror 0: d16
State: Okay
Submirror 1: d17
State: Okay
d16: Submirror of d15
State: Okay
d17: Submirror of d15
State: Okay
d25: Mirror
Submirror 0: d26
State: Okay
Submirror 1: d27
State: Okay
d26: Submirror of d25
State: Okay
d27: Submirror of d25
State: Okay等等。
我想把每一面镜子都放在一个阵列里。
例如:
echo ${array[0]}
d15: Mirror
Submirror 0: d16
State: Okay
Submirror 1: d17
State: Okay
d16: Submirror of d15
State: Okay
d17: Submirror of d15
State: Okay
echo ${array[1]}
d25: Mirror
Submirror 0: d26
State: Okay
Submirror 1: d27
State: Okay
d26: Submirror of d25
State: Okay
d27: Submirror of d25
State: Okay什么是最好的独白?
发布于 2014-12-02 14:49:18
纯bash解决方案:
declare -a MIRROR_ARR
COUNT=-1
IFS=''
while read -r line
do
if [[ "$line" =~ Mirror ]]; then
COUNT=$(( $COUNT + 1 ))
MIRROR_ARR[$COUNT]=$line
else
MIRROR_ARR[$COUNT]=$(printf '%s\n%s' "${MIRROR_ARR[$COUNT]}" "$line")
fi
done < <(metastat |egrep 'Submirror|State|d' |egrep -v 'Read|Write|c|Reloc')
echo "${MIRROR_ARR[0]}"
echo "----"
echo "${MIRROR_ARR[1]}"发布于 2014-12-02 14:16:15
您可以使用csplit (POSIX)这样做:
csplit -z your_file /Mirror/ {*}在这里,z是--elide-empty-files的缺点,而{*}则是尽可能多地重复以前的模式。
如果行数是固定的(在您的例子中是9),您可以使用split来完成它。
split -l9 your_file在这两种情况下,如果要将每个文件的内容保存在数组中,可以这样做:
i=0 IFS=
for mirror in <prefix>*; do array[((i++))]=$(cat $mirror); done用您选择的前缀或默认前缀替换<prefix>。
使用csplit的示例
$ cat your_file
d15: Mirror
Submirror 0: d16
State: Okay
Submirror 1: d17
State: Okay
d16: Submirror of d15
State: Okay
d17: Submirror of d15
State: Okay
d25: Mirror
Submirror 0: d26
State: Okay
Submirror 1: d27
State: Okay
d26: Submirror of d25
State: Okay
d27: Submirror of d25
State: Okay
$ csplit -z your_file /Mirror/ {*}
166
166
$ ls -1
xx00
xx01
your_file
$ i=0 IFS=
$ for mirror in xx*; do array[((i++))]=$(cat $mirror); done
$ echo ${array[0]}
d15: Mirror
Submirror 0: d16
State: Okay
Submirror 1: d17
State: Okay
d16: Submirror of d15
State: Okay
d17: Submirror of d15
State: Okay
$ echo ${array[1]}
d25: Mirror
Submirror 0: d26
State: Okay
Submirror 1: d27
State: Okay
d26: Submirror of d25
State: Okay
d27: Submirror of d25
State: Okayhttps://stackoverflow.com/questions/27251087
复制相似问题