将bash数组值赋给变量

时间:2015-11-05 15:24:05

标签: bash

我有一个包含磁盘列表的文件及其序列号在不同的行中。数据格式如下:

Disk hostname disk              /proc/cds/cdd/disks/csd1
Disk hostname disk              serial: NAGYNLGX
Disk hostname disk              /proc/cds/cdd/disks/csd10
Disk hostname disk              serial: NAGY85MX

我正在尝试从/ proc / cds / cdd / disks / cds1这两行中的第一行中获取数据,然后将下一行的序列号放在同一行上,以便将其格式化为方式:

/proc/cds/cdd/disks/csd1  NAGYNLGX
/proc/cds/cdd/disks/cds10 NAGY85MX

我尝试使用数组读取所有文件输出,然后使用bash脚本中的值分配变量。

#!/bin/bash
readarray a < rec20.txt

total=${#a[*]}

for (( i=0; i<=$(( $total -1 )); i++ ))
do
let b=i+1
#     echo -n "${a[$i]} "|awk '{print $4}'; echo -n "${a[$b]} "|awk '{print $5}'
#     echo -e "${a[$i]} "|awk '{print $4}'\t; echo -e "${a[$b]} "|awk '{print $5}'\n
#     set var1= echo "${a[$i]} " |awk '{print $4}'
#     set var2= echo "${a[$b]} " |awk '{print $5}'
#     var1=printf '%s\t' "${a[$i]} "|awk '{print $4}'
#     var2=printf '%s\n' "${a[$b]} "|awk '{print $5}'
echo -e "${a[$i]} "|awk '{print $4}'\t
echo -e "${a[$b]} "|awk '{print $5}'\n
echo "var1 is $var1 var2 is $var2"
let i++
done

2 个答案:

答案 0 :(得分:1)

使用awk

可以轻松完成此操作
awk -v OFS='\t' 'NR%2{s=$NF; next} {print s, $NF}' rec20.txt
/proc/cds/cdd/disks/csd1    NAGYNLGX
/proc/cds/cdd/disks/csd10   NAGY85MX

btw将文件数据正确读入BASH数组,您需要使用-t选项,即

readarray -t a < rec20.txt

答案 1 :(得分:0)

这里将读取文件(file.txt)并解析它你想要的方式:

read -a lines <<< `cat file.txt | sed -e "s/.* //"` 

for (( i=0; i<${#lines[*]}; i+=2 )); do
    myArray+=("${lines[i]}  ${lines[i+1]}")
done

第一行读取文件并将其传递给&#34; sed&#34;在最后一个空间之后修剪掉一切。因此文件内容将从您发布的内容更改为:

/proc/cds/cdd/disks/csd1
NAGYNLGX
/proc/cds/cdd/disks/csd10
NAGY85MX

然后我只是循环遍历所有的行,并且我附加的每一行都是#34; myArray&#34;保持当前行和下一行放在一起。