awk não está produzindo a saída desejada

1

Abaixo está minha saída de comando. Quando eu procuro através de awk , está dando saída indesejada. O que estou fazendo errado?

    # 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.......
    enter code here

Estou ansioso para ver o "LV Name" & "Volume físico" apenas. Isso significa que uma entrada deve estar visível apenas uma vez. A saída que estou esperando é a seguinte:

/dev/Appsvg/apps01 /dev/emcpoweraq
/dev/Appsvg/apps02 /dev/emcpoweraq
/dev/Appsvg/apps03 /dev/emcpoweraq
    
por Linu 16.11.2015 / 18:47

1 resposta

6

Se eu estou supondo corretamente, você só precisa de um conjunto extra de chaves para combinar as duas últimas declarações ( p=$3 e print l,p ):

                                                           /-     HERE    -\
                                                          \/               \/
lvdisplay -m | awk '/(LV Name)/{l=$3} /(Physical volume)/{{p=$3} {print l,p;}}'

Para o comentário de Ulrich Schwarz, mais óbvio pode ser:

lvdisplay -m | awk '/(LV Name)/{l=$3} /(Physical volume)/{p=$3; print l,p;}'

O comando awk da sua pergunta estava atribuindo "l" e "p" como esperado, mas "print l, p" não tinha condição antes, então estava sendo executado em todas as linhas.

    
por 16.11.2015 / 19:08