首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash -每个镜像处理元统计数据

Bash -每个镜像处理元统计数据
EN

Stack Overflow用户
提问于 2014-12-02 13:51:28
回答 2查看 68关注 0票数 2

我有一堆来自以下命令的输出:

代码语言:javascript
复制
 metastat |egrep 'Submirror|State|d' |egrep -v 'Read|Write|c|Reloc'

输出如下:

代码语言:javascript
复制
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

等等。

我想把每一面镜子都放在一个阵列里。

例如:

代码语言:javascript
复制
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

什么是最好的独白?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-02 14:49:18

bash解决方案:

代码语言:javascript
复制
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]}"
票数 2
EN

Stack Overflow用户

发布于 2014-12-02 14:16:15

您可以使用csplit (POSIX)这样做:

代码语言:javascript
复制
csplit -z your_file /Mirror/ {*}

在这里,z--elide-empty-files的缺点,而{*}则是尽可能多地重复以前的模式。

如果行数是固定的(在您的例子中是9),您可以使用split来完成它。

代码语言:javascript
复制
split -l9 your_file

在这两种情况下,如果要将每个文件的内容保存在数组中,可以这样做:

代码语言:javascript
复制
i=0 IFS=
for mirror in <prefix>*; do array[((i++))]=$(cat $mirror); done

用您选择的前缀或默认前缀替换<prefix>

使用csplit的示例

代码语言:javascript
复制
$ 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: Okay
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27251087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档