2016-03-23 2 views
1

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

Mar 22 23:26:18.793031 localhost my_process[1123]: (my_id) contents of actual log output 
Mar 22 23:26:18.946769 localhost my_process[1123]: (my_id) more singe line contents 
Mar 22 23:26:18.955423 localhost my_process[1123]: (my_id) 
**** 
* this log statement has a bunch of lines 
**** 

Я хочу, чтобы вырезать много барахла из этих линий, так что они не так долго. Тем не менее, я хочу только сократить строки, начинающиеся с даты и т. Д., Оставив только другие строки. Это должно выглядеть примерно так:

23:26:18 my_process[1123]: contents of actual log output 
23:26:18 my_process[1123]: more singe line contents 
23:26:18 my_process[1123]: 
**** 
* this log statement has a bunch of lines 
**** 

Это трубопровод, который я собираюсь, но он режет все линии.

# first cut out the unwanted fields 
# then cut out the unwanted decimal part of the timestamp 
tail -f mylog.txt | cut -d " " -f 3,5,7- | cut -c 1-8,16- 

Есть ли способ, которым я мог смотреть на строки, которые не начинаются с этой общей шаблон даты и пусть эти строки через необработанный?

Благодаря

ответ

1

Вы можете использовать AWK, как это:

awk '/ [0-9]{2}:[0-9]{2}:[0-9]{2}/{ 
    split($0, a, /: \([^)]+\) /) 
    sub(/\.[0-9]+/, "", $3) 
    print $3, $5, a[2] 
    next 
} 1' file.log 

23:26:18 my_process[1123]: contents of actual log output 
23:26:18 my_process[1123]: more singe line contents 
23:26:18 my_process[1123]: 
**** 
* this log statement has a bunch of lines 
**** 

/ [0-9]{2}:[0-9]{2}:[0-9]{2}/ будет искать для конкретной модели с hh:mm:ss в строке ввода и анализирующие только те строки. Остальные строки будут напечатаны как есть.

Смежные вопросы