我有一个包含磁盘列表的文件及其序列号在不同的行中。数据格式如下:
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
答案 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;保持当前行和下一行放在一起。