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

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

«02 / июн / 2009» «14:38:50»

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

Отношении

0
JDR 3 Июн 2009 в 02:18

5 ответов

Лучший ответ

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

cat log | sed -e 's/"\([^:]*\):\([^"]*\)"/"\1" "\2"/'
3
RichieHindle 2 Июн 2009 в 22:26

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

cat file.txt | sed -e 's/:/" "/'
1
Chris J 2 Июн 2009 в 22:24

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

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

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

cat file.txt | gawk '$0=gensub(/("[^:]*):([^"]*")/,"\\1\" \"\\2",1)'
0
Hirofumi Saito 4 Июн 2009 в 14:29

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

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
P MP M 15 Июн 2009 в 17:10

Чистый Баш:

while read line ; do echo ${line/:/\" \"}; done < logfile
1
Fritz G. Mehner 4 Июн 2009 в 14:52