как разбить строки в выводе файла журнала Unix - PullRequest
0 голосов
/ 03 июня 2009

Я бы хотел иметь возможность анализировать дату и время из файла журнала. В настоящее время они находятся в следующем формате:

"02 / Jun / 2009: 14: 38: 50", но я хотел бы разделить их на разные столбцы, используя что-то доступное из командной строки linux, чтобы получаемый результат выглядел следующим образом:

"02 / Jun / 2009" "14:38:50"

Может ли кто-нибудь пролить свет на то, как это можно сделать?

Привет

Ответы [ 5 ]

3 голосов
/ 03 июня 2009

Крис ответит лучше, если нет строк с другими форматами. Если вам нужно воздействовать только на строки с этим конкретным форматом, вот что:

cat log | sed -e 's/"\([^:]*\):\([^"]*\)"/"\1" "\2"/'
1 голос
/ 04 июня 2009

Pure Bash:

while read line ; do echo ${line/:/\" \"}; done < logfile
1 голос
/ 03 июня 2009

Если это все, что есть в каждой строке, возможно:

cat file.txt | sed -e 's/:/" "/'
0 голосов
/ 15 июня 2009

Битерскрипт для поиска регулярного выражения «&: &: &: &» и разделения до и после первого двоеточия. (& означает любое количество любых символов).

var str log
cat "logfile" > $log
while ( { sen -r "^&:&:&:&^" $log } > 0 )
do
    var str datetime, date, time
    stex -r "^&:&:&:&^" $log > $datetime
    stex -p "]^:^" $datetime > $date    # String before the first : is date.
    stex -p "^:^[" $datetime > $time    # String after the first : is time.
    echo $date "\t" $time
done

Чтобы попробовать, вы можете скачать битерскрипт. Google, или инструкции по установке на http://www.biterscripting.com.

0 голосов
/ 04 июня 2009

Функция sub () в awk возвращает 1, если замена прошла успешно, поэтому:

cat file.txt | awk 'sub(/:/,"\" \"")'

GNU awk может использовать функцию gensub (), поэтому ниже приведен пример обратной ссылки.

cat file.txt | gawk '$0=gensub(/("[^:]*):([^"]*")/,"\\1\" \"\\2",1)'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...