colunas awk para linhas quebradas para nova linha

1

Na minha página stats.txt , tenho o seguinte:

Get-VMHardDiskDrive | Select-Object Path

ComputerName : ACD-VMH04
Path         : D:\HYPER-V\VMDEV01\Virtual Hard Disks\f9314d7d-5d2d-11e0-8feb-806e6f6e6963_2012-06-29T153327.vhd
VhdFormat    : VHD
VhdType      : Dynamic
Used Space   : .07
Prov Space   : 4.00

ComputerName : ACD-VMH04
Path         : D:\HYPER-V\VMDEV01\Virtual Hard Disks\C_2012-06-29T153327.vhd
VhdFormat    : VHD
VhdType      : Dynamic
Used Space   : 258.04
Prov Space   : 906.34

Eu corro o seguinte comando AWK para me dar isto:

ACD-VMH04
D:\HYPER-V\VMDEV01\Virtual Hard Disks\f9314d7d-5d2d-11e0-8feb-806e6f6e6963_2012-06-29T153327.vhd
VHD
Dynamic
.07
4.00

ACD-VMH04
D:\HYPER-V\VMDEV01\Virtual Hard Disks\C_2012-06-29T153327.vhd
VHD
Dynamic
258.04
906.34

O arquivo tem cerca de 6 itens como esse, no entanto, outros arquivos têm mais, por isso estou querendo saber como fazer com que a saída fique assim:

ACD-VMH04 - D:\HYPER-V\VMDEV01\Virtual Hard Disks\f9314d7d-5d2d-11e0-8feb-806e6f6e6963_2012-06-29T153327.vhd - VHD - Dynamic - .07 - 4.00
ACD-VMH04 - D:\HYPER-V\VMDEV01\Virtual Hard Disks\C_2012-06-29T153327.vhd - VHD - Dynamic - 258.04 - 906.34

Isso, de certa forma, fará o trabalho, mas eu não sei como parar e fazer uma nova linha quando ela atinge uma linha em branco.

awk -F  " : " '{ ORS = " " } /Select-Object Path/ { output = 1; start = NR + 2 }; output && NR >= start { print $2, "-" }' stats.txt
    
por Anthony Fornito 30.03.2017 / 22:02

2 respostas

2

Eu não tenho um forro para você, mas o conceito chave aqui é armazenar o campo até que você tenha coletado todos eles e depois imprimi-los em uma linha. Além disso, uma linha em branco terá o número de campos (NF) igual a zero.

Código:

#!/bin/awk -f
BEGIN {FS = " : "; OFS = " - "}
NF > 0 {
    gsub(/[ ]+$/, "", $1)
    a[$1] = $2
}

NF == 0 {dump()}

END {dump()}

function dump() {
    print a["ComputerName"], a["Path"], a["VhdFormat"], a["VhdType"]
}

Resultados:

ACD-VMH04 - D:\HYPER-V\VMDEV01\Virtual Hard Disks\f9314d7d-5d2d-11e0-8feb-806e6f6e6963_2012-06-29T153327.vhd - VHD - Dynamic
ACD-VMH04 - D:\HYPER-V\VMDEV01\Virtual Hard Disks\C_2012-06-29T153327.vhd - VHD - Dynamic
    
por 30.03.2017 / 22:43
1
perl -lne '
   /Select-Object Path/ and !$a++ and <>,next;

   /^ComputerName\s+:/ && $a .. /^$/ || eof and do{
      push  @A, (/\s+:\s+\K(.*)/)[0]          if /^ComputerName\s+:/ || /./;
      print join(" - ", splice(@A,0,@A)),"\n" if /^$/                || eof;
   };

' stats.txt

Saída

ACD-VMH04 - D:\HYPER-V\VMDEV01\Virtual Hard Disks\f9314d7d-5d2d-11e0-8feb-806e6f6e6963_2012-06-29T153327.vhd - VHD - Dynamic - .07 - 4.00

ACD-VMH05 - D:\HYPER-V\VMDEV01\Virtual Hard Disks\C_2012-06-29T153327.vhd - VHD - Dynamic - 258.04 - 906.34
    
por 30.03.2017 / 23:36