Как можно распечатать каждое имя файла на выходе с результатами сопоставления с шаблоном - PullRequest
0 голосов
/ 20 декабря 2018
  while read line
  do
  awk '
     /ERROR/ {
            print
            for (i=1; i<=10; i++) {
                   getline; print
            }
            exit
            }
 ' $line  
   echo $line    
   done < logfiles.csv >> results.csv

с приведенным выше кодом, я получаю вывод, как показано ниже в моем файле results.csv

  1.log 
  ERROR
  2.log
  ERROR

, но хотел вывод, как показано ниже

  1.log ERROR
  2.log ERROR

мой logfile.csvсодержит информацию, как показано ниже

1.log
2.log

1 Ответ

0 голосов
/ 20 декабря 2018

Хорошо, я предполагаю, что:

  • logfiles.csv - это текстовый файл, содержащий имена файлов журнала, по одному имени в строке
  • каждый из этих файлов журнала может содержать ERROR шаблон, если это так, строка должна быть напечатана с именем файла и "ERROR"
  • результат должен быть в файле result.csv

Это может быть просто вPython:

with open("logfiles.csv") as files, open("result.csv", "w") as fdout:
    for filename in files:             # read input file line by line
        filename = filename.strip()    # strip end of line
        with open(filename) as fd:     # open each log file
            for line in fd:
                if 'ERROR' in line:    # search the pattern ERROR in any line
                    print(filename, 'ERROR', file=fdout) # message if found
                    break                                # and stop processing that log
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...