AIX 上的命令是:
[root@hx042:/home/user1]$ lqueryvg -Atp hdiskpower13
0516-1396 lqueryvg: The physical volume hdiskpower13, was not found in the system database.
Max LVs: 256
PP Size: 30
Free PPs: 0
LV count: 3
PV count: 3
Total VGDAs: 3
Conc Allowed: 0
MAX PPs per PV: 1016
MAX PVs: 32
Quorum (disk): 1
Quorum (dd): ???????
Auto Varyon ?: 1
Conc Autovaryon 0
Varied on Conc: 0
Logical: 00f62b5c00004c000000014de7f073b1.1 prekod 1
00f62b5c00004c000000014de7f073b1.2 prekre 1
00f62b5c00004c000000014de7f073b1.3 prekcf 1
Physical: 00f62b5ceb80c074 1 0
00f62b5ceb76311b 1 0
00f62b5ceb790075 1 0
Total PPs: 309
LTG size: 128
HOT SPARE: 0
AUTO SYNC: 0
VG PERMISSION: 0
SNAPSHOT VG: 0
IS_PRIMARY VG: 0
PSNFSTPP: 4352
VARYON MODE: ???????
VG Type: 0
Max PPs: 32512
Mirror Pool Str n
Sys Mgt Mode: ???????
VG Reserved: ???????
PV RESTRICTION: ???????
Infinite Retry: 2
Varyon State: 0
Disk Block Size 512
我只需要这些值:
prekod
prekre
prekcf
我试过:
[root@hx042:/home/user1]$ lqueryvg -Atp hdiskpower13|sed -n -e '/Logical/,/Physical/ p'
0516-1396 lqueryvg: The physical volume hdiskpower13, was not found in the
system database.
Logical: 00f62b5c00004c000000014de7f073b1.1 prekod 1
00f62b5c00004c000000014de7f073b1.2 prekre 1
00f62b5c00004c000000014de7f073b1.3 prekcf 1
Physical: 00f62b5ceb80c074 1 0
现在我陷入困境,因为Logical
与我需要的第一个值在同一行,还有一个不可避免的错误消息,在这一点上根本没有用,我也不需要。
答案1
可能有一种更聪明的方法可以在 awk 中完成这一切,但 Guido 的做法是正确的,将 stderr 发送到 /dev/null 来删除该0516-1396
消息。这是一个管道,用于sed
仅打印“逻辑:”和“物理”之间的行,然后再次使用 sed 删除尾随的“物理”行并删除“逻辑:”文本,然后使用 awk 打印第二列:
lqueryvg -Atp hdiskpower13 | \
sed -n '/^Logical:/,/^Physical:/ p' | \
sed '/^Physical:/d; s/^Logical://' | \
awk '{print $2}'
这是一个全 awk 的解决方案,但仍然相当暴力:
lqueryvg -Atp hdiskpower13 | \
awk '/^Logical:/,/^Physical/ {
if (! /^Physical:/) {
gsub("Logical:", "", $0);
print $2 }}'
答案2
for i in prekod prekcf prekre; do lqueryvg -Atp hdiskpower13 | grep $i; done | sed 's/Logical://g' | sed 's/^[ \t]*//;s/[ \t]*$//' | awk '{print $2" "$3}'
答案3
我认为 cut 也可以工作,而且会更简单一些,假设输出总是相似的。对于上面引用的具体输出:
grep 'prek*' |cut -w -f3