Подготовить строки с префиксом файла с помощью sed или awk

Как изменить образец входного файла, чтобы получить что-то вроде выходного файла ниже?

Входной файл:

 / TMP / журналы
 10/13/15 00:19:13 templogs1
 10/13/15 00:19:13 dummylogs
 10/13/15 01:19:12 test
 Ошибка 10/13/15 01:19:12
 / TMP / ошибка
 10/13/15 00:16:10 x
 10/13/15 00:16:10 y
 10/13/15 01:16:10 z
 10/13/15 01:16:10 a
 / TMP / доступ
 10/13/15 00:56:14 b
 10/13/15 00:56:14 c

Выходной файл:

 / tmp / logs 10/13/15 00:19:13 templogs1
 / tmp / logs 10/13/15 00:19:13 dummylogs
 / tmp / logs 10/13/15 01:19:12 test
 / tmp / logs 10/13/15 01:19:12 ошибка
 / tmp / error 10/13/15 00:16:10 x
 / tmp / error 10/13/15 00:16:10 y
 / tmp / error 10/13/15 01:16:10 z
 / tmp / error 10/13/15 01:16:10 a
 / tmp / access 10/13/15 00:56:14 b
 / tmp / access 10/13/15 00:56:14 c

  • Дополнение с 'sed'
  • Выключение как косой черты, так и обратной косой черты с помощью sed
  • Как добавить несколько расширений в строку с sed?
  • Как найти строки, содержащие строку, а затем напечатать эти конкретные строки и что-то еще
  • Использование AWK добавляет новую строку, если существует совпадение
  • Как удалить строку, если разница между двумя столбцами меньше 2000
  • как заменить значение на это значение + константа
  • Наложение символа между повторяющимися символами
  • 2 Solutions collect form web for “Подготовить строки с префиксом файла с помощью sed или awk”

    Попробуйте с sed

     sed ' /^\//{ # execite block if line start with «/» h # put line into hold-space d # clean, return to beginning } # end block G # append hold-space to line s/\(.*\)\n\(.*\)/\2 \1/ # exchange first and last part of line ' input.file > output.file 

    и другой вариант

     sed ' /^\//{ # execute from line started with «/» :1 # mark return point N # get next line /\n\//D # if such next line started «/» remove previous #+and starts from the beginning with last line s/\n/ /p # change newline with space and prints both lines s/ .*// # removes last line $!b1 # return to marked point with fist line if not end d # clean all (finish) } ' input.file > output.file 

    пытаться

     awk 'substr($1,1,1) == "/" { prefix=$0 ; next ; } { printf "%s %s\n",prefix,$0;}' 

    это будет захватывать префикс, когда они начинаются с ' / ' …

    Interesting Posts
    Linux и Unix - лучшая ОС в мире.