awk столбцы для строк разбиваются на новую строку

На моей странице stats.txt меня есть следующее:

 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 

Я запускаю следующую команду AWK чтобы дать мне следующее:

 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 

В файле примерно 6 таких элементов, но в других файлах есть больше, поэтому мне интересно, как заставить вывод выглядеть так:

 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 

Это несколько справится с этой задачей, но я не знаю, как это остановить и сделать новую строку, когда она попадает в пустую строку.

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

  • Замена первого номера файла на его половину
  • Awk, результат печати
  • Обработать несколько файлов и распечатать имя файла без расширения и значение определенного ключа
  • сравнение значений в отдельных столбцах
  • Шаблон печати регулярных выражений AWK
  • Удалите частичные дубликаты последовательных строк, но сохраните первый и последний
  • AWK: разделитель полей
  • Перечислите дни рождения в том порядке, в котором они придут с сегодняшнего дня
  • 2 Solutions collect form web for “awk столбцы для строк разбиваются на новую строку”

    У меня нет одного лайнера для вас, но ключевой концепцией здесь является сохранение поля, пока вы их не соберете, а затем распечатайте на одной строке. Также пустая строка будет иметь число полей (NF), равное нулю.

    Код:

     #!/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"] } 

    Результаты:

     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 
     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 

    Вывод

     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 
    Linux и Unix - лучшая ОС в мире.