0

我有两行的值,想要获取所有值并将它们设为变量。

输出来自 emc 存储:

Bus 0 Enclosure 0  Disk 0
State:                   Enabled

Bus 0 Enclosure 0  Disk 1
State:                   Enabled

预期结果:

Bus:0|Enclosure:0|Disk:0|State:Enabled

或者只是需要有人给我指导如何获得最后一排......

4

4 回答 4

3

这可能对您有用(GNU sed):

sed '/^Bus/!d;N;s/[0-9]\+/:&|/g;s/\s//g' file

要仅获取最后一行:

sed '/^Bus/{N;h};$!d;x;s/[0-9]\+/:&|/g;s/\s//g' file
于 2013-08-29T08:05:00.647 回答
2
perl -00anE 's/:// for @F; say join "|", map { $_%2 ? () : "$F[$_]:$F[$_+1]" } 0..$#F' file

输出

Bus:0|Enclosure:0|Disk:0|State:Enabled
Bus:0|Enclosure:0|Disk:1|State:Enabled
于 2013-08-29T07:48:32.963 回答
2

试试这个 awk:

$ awk '/^Bus/{for(i=1;i<=NF;i+=2) printf "%s:%s|", $i,$(i+1)}/^State/{printf "%s%s\n", $1, $2}' file
Bus:0|Enclosure:0|Disk:0|State:Enabled
Bus:0|Enclosure:0|Disk:1|State:Enabled

要处理最后一个字段中的多个单词,您可以执行以下操作:

$ awk '/^Bus/{for(i=1;i<=NF;i+=2) printf "%s:%s|", $i,$(i+1)}/^State/{printf "%s", $1; for (i=2;i<=NF;i++) printf "%s ", $i; print ""}' file
Bus:0|Enclosure:0|Disk:0|State:Enabled 
Bus:0|Enclosure:0|Disk:1|State:hot space
于 2013-08-29T07:31:45.267 回答
1

GNU awk可以这样做:

$ awk 'NR>1{$6=$6$7;NF--;print RS,$0}' RS='Bus' OFS='|' file
Bus|0|Enclosure|0|Disk|0|State:Enabled
Bus|0|Enclosure|0|Disk|1|State:Enabled

并且仅对于最后一行:

$ awk 'END{$6=$6$7;NF--;print RS,$0}' RS='Bus' OFS='|' file
Bus|0|Enclosure|0|Disk|1|State:Enabled
于 2013-08-29T08:10:15.400 回答