Я анализирую некоторые данные журнала из процесса и имею различные столбцы, такие как идентификатор, дата, время, код журнала, текст журнала.
идентификатор уникален для продукта
дата и время - компоненты времени, когда был захвачен журнал.
Код журнала - это код, специфичный для текста журнала.
текст журнала - это 256-символьный текст, описывающий процесс
, например
ID Date time log id log text
A 01/10/18 9:00:00 bbb process begin
A 01/10/18 9:00:00 yyy dimensions not specified
A 01/10/18 9:00:30 fff failure
A 01/10/18 9:00:30 ddd dispatched
A 01/10/18 9:00:30 sss process success
B 01/10/18 9:01:01 bbb process begin
B 01/10/18 9:01:50 mmm moved to stage2
B 01/10/18 9:02:50 aaa space not allocated
B 01/10/18 9:02:50 fff failure
Я хочу выполнить grep (или, скорее, создать подмножество) указанного набора данных в выходных данных csv или xls, которые удовлетворяют следующим условиям (могут быть изменены), например:
- 2 строки над строкой, где текст журнала = не удалось
- все строки с идентификатором журнала sss
так что мой ожидаемый результат -
ID Date time log id log text
A 01/10/18 9:00:00 bbb process begin
A 01/10/18 9:00:00 yyy dimensions not specified
A 01/10/18 9:00:30 fff failure
B 01/10/18 9:01:50 mmm moved to stage2
B 01/10/18 9:02:50 aaa space not allocated
B 01/10/18 9:02:50 fff failure
A 01/10/18 9:00:30 sss process success
используя обсуждение в теме ниже:
Grep для слова, и, если найдено, выведите 10 строк до и 10 строк после совпадения шаблона
Я попробовал какой-то кусок кода, чтобы получить следующий фрагмент:
подпроцесс импорта
filename = "filename.csv"
string_to_search = "failure"
extract = (subprocess.getstatusoutput("grep -C 2 '%s' %s"%(string_to_search, filename)))[1]
print(extract)