2014-10-28 5 views
0

У меня есть строки в лог-файл, который выглядит какИспользование Grep или AWK

Oct 07, 2014 7:39:10 AM x.y.z 

SEVERE: adding the post (STORY) abcd = 495274900579805_10204277254604731 : a = 0 b = 0 c = 0 

Я хотел бы получить дату и время от первой линии и = 0 B = 0 C = 0 из второго Как я могу достичь этого, используя grep и awk. Пожалуйста, помогите

+2

Вы можете поделиться тем, что вы уже попросили? Если вы делаете awk, вам обычно не нужен grep. – Anton

+0

Hi @Anton Я использовал cat 2014-10-07_log * | grep -B 1 "495274900579805_1020427725460473", чтобы получить две вышеуказанные строки, мне нужно извлечь элементы, которые я упомянул из предыдущего сообщения. –

ответ

0

Вот awk версия (вы просили AWK)

awk '/AM|PM/ && NF--; /a =/ {print "a = "$(NF-6),"b = "$(NF-3),"c = "$NF}' file 
Oct 07, 2014 7:39:10 AM 
a = 0 b = 0 c = 0 

Другая версия:

awk '/AM|PM/ && NF--; {n=split($0,a,"abcd");if (n==2) print "abcd"a[2]}' file 
Oct 07, 2014 7:39:10 AM 
abcd = 495274900579805_10204277254604731 : a = 0 b = 0 c = 0 
+0

Просто потрясающе @ Джотн работал как кусок пирога. Надеюсь, я начну изучать мои основы на awk –

0

Вы можете попробовать ниже команды Grep,

$ grep -oP '.*?(?=\s[^.\s]+\.[^.\s]+\.\S+)|:\s+\K[^:]*$' file 
Oct 07, 2014 7:39:10 AM 
a = 0 b = 0 c = 0 

Update:

$ grep -oP '.*?(?=\s[^.\s]+\.[^.\s]+\.\S+)|\) *\K.*' file 
Oct 07, 2014 7:39:10 AM 
abcd = 495274900579805_10204277254604731 : a = 0 b = 0 c = 0 
+0

Привет @Avinash Он работал красиво есть небольшое изменение в данных, которые должны быть напечатаны, я могу получить, чтобы напечатать вторую строку как ABCD = 495274900579805_10204277254604731: а = 0 Ь = 0 с = 0 и наконец, мне нужно нажать эти строки на csv, где дата должна быть в первом столбце, abcd во втором столбце, a в третьем и b, c, следующих за последующими столбцами в csv. Пожалуйста, помогите мне это –

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