我有两行的值,希望获取所有值并将其设置为变量。从两行获取值并将其转换为变量
输出从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
或者只是需要有人给我方向如何让最后一排...
我有两行的值,希望获取所有值并将其设置为变量。从两行获取值并将其转换为变量
输出从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
或者只是需要有人给我方向如何让最后一排...
试试这个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
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
这可能会为你工作(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
随着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
也许能延长脚本举例来说,如果没有启用最新的Word和恩:热备用,那么我们应该只看到“热门”。在最后一栏之后如何改进以获得一切? –
@KalinBorisov更新 – user000001