以下は私のコマンド出力です。で処理すると、awk
不要な出力が発生します。私は何が間違っていましたか?
# lvdisplay -m
--- Logical volume ---
LV Name /dev/Appsvg/apps01
VG Name Appsvg
LV UUID TckScf-LXdY-BvU1-NGhQ-5vUQ-KoNz-Uus1Of
LV Write Access read/write
LV Status available
# open 1
LV Size 15.00 GB
Current LE 3840
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
--- Segments ---
Logical extent 0 to 3839:
Type linear
Physical volume /dev/emcpoweraq
Physical extents 0 to 3839
--- Logical volume ---
LV Name /dev/Appsvg/apps02
VG Name Appsvg
LV UUID FcMopR-57MH-aTrT-3bq2-wUJZ-blEI-161Ivz
LV Write Access read/write
LV Status available
# open 1
LV Size 10.00 GB
Current LE 2560
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
--- Segments ---
Logical extent 0 to 2559:
Type linear
Physical volume /dev/emcpoweraq
Physical extents 3840 to 6399
--- Logical volume ---
LV Name /dev/Appsvg/apps03
VG Name Appsvg
LV UUID Ji4ldh-2ffZ-9qmb-BVaz-rwYd-f9HQ-2imPYG
LV Write Access read/write
LV Status available
# open 1
LV Size 20.00 GB
Current LE 5120
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2
--- Segments ---
Logical extent 0 to 5119:
Type linear
Physical volume /dev/emcpoweraq
Physical extents 6400 to 11519
# lvdisplay -m|awk '/(LV Name)/{l=$3} /(Physical volume)/{p=$3} {print l,p;}'
/dev/Appsvg/apps01
/dev/Appsvg/apps01
/dev/Appsvg/apps01
/dev/Appsvg/apps01
/dev/Appsvg/apps01
/dev/Appsvg/apps01
/dev/Appsvg/apps01
/dev/Appsvg/apps01
/dev/Appsvg/apps01
/dev/Appsvg/apps01
/dev/Appsvg/apps01
/dev/Appsvg/apps01
/dev/Appsvg/apps01
/dev/Appsvg/apps01
/dev/Appsvg/apps01
/dev/Appsvg/apps01
/dev/Appsvg/apps01
/dev/Appsvg/apps01 /dev/emcpoweraq
/dev/Appsvg/apps01 /dev/emcpoweraq
/dev/Appsvg/apps01 /dev/emcpoweraq
/dev/Appsvg/apps01 /dev/emcpoweraq
/dev/Appsvg/apps01 /dev/emcpoweraq
/dev/Appsvg/apps02 /dev/emcpoweraq
/dev/Appsvg/apps02 /dev/emcpoweraq
/dev/Appsvg/apps02 /dev/emcpoweraq
/dev/Appsvg/apps02 /dev/emcpoweraq
/dev/Appsvg/apps02 /dev/emcpoweraq
................. output snipped.......
「LV名」と「物理ボリューム」だけが見えると予想しました。これは、アイテムが一度だけ表示されることを意味します。私の予想結果は次のとおりです。
/dev/Appsvg/apps01 /dev/emcpoweraq
/dev/Appsvg/apps02 /dev/emcpoweraq
/dev/Appsvg/apps03 /dev/emcpoweraq
答え1
p=$3
私の推測が正しい場合、最後の2つのステートメント(およびprint l,p
)を組み合わせるには、追加の中括弧セットが必要です。
/- HERE -\
\/ \/
lvdisplay -m | awk '/(LV Name)/{l=$3} /(Physical volume)/{{p=$3} {print l,p;}}'
Ulrich Schwarzのコメントに関しては、より明白になるかもしれません。
lvdisplay -m | awk '/(LV Name)/{l=$3} /(Physical volume)/{p=$3; print l,p;}'
質問のコマンドはawk
期待どおりに「l」と「p」を割り当てますが、「print l、p」の前には条件がないため、すべての行で実行されます。