2017-01-31 3 views
1

Можете ли вы помочь мне решить этот запрос? Первое поле представляет собой JOBID, и мне нужно получить последний обработанный счетчик JOBID, поэтому я попытался сделать AWK-скрипт для выполнения того, что просто показывает мне последние данные последнего JOBID. Как я могу получить последние данные каждого JOBID с AWK?Найти последнюю строку каждого JOBID (AWK)

@ Входные данные

259/logs/progress.log:2017-01-31 13:54:02/PROCESSED_COUNT/0 
259/logs/progress.log:2017-01-31 13:55:12/PROCESSED_COUNT/4881000 
259/logs/progress.log:2017-01-31 13:55:15/PROCESSED_COUNT/5000000 
260/logs/progress.log:2017-01-31 13:54:43/PROCESSED_COUNT/0 
258/logs/progress.log:2017-01-31 13:54:02/PROCESSED_COUNT/0 
258/logs/progress.log:2017-01-31 13:54:12/PROCESSED_COUNT/1018216 
258/logs/progress.log:2017-01-31 13:54:22/PROCESSED_COUNT/2045037 
260/logs/progress.log:2017-01-31 13:54:53/PROCESSED_COUNT/343000 
260/logs/progress.log:2017-01-31 13:55:03/PROCESSED_COUNT/751997 
260/logs/progress.log:2017-01-31 13:56:43/PROCESSED_COUNT/4814880 
260/logs/progress.log:2017-01-31 13:56:49/PROCESSED_COUNT/4999996 

@ AWK

awk '/PROCESSED_COUNT/ {a=$0} END{if (a!="") print a}' test 

@ Выход

260/logs/progress.log:2017-01-31 13:56:49/PROCESSED_COUNT/4999996 

@ Желаемая выход

259/logs/progress.log:2017-01-31 13:55:15/PROCESSED_COUNT/5000000 
258/logs/progress.log:2017-01-31 13:54:22/PROCESSED_COUNT/2045037 
260/logs/progress.log:2017-01-31 13:56:49/PROCESSED_COUNT/4999996 

ответ

1

Вы можете хранить записи во время сканирования файла и распечатать их в конце:

awk -F/ '{a[$1]=$0}END{for(i in a){print a[i]}}' a.txt 

одно: не сохранять порядок последнего появления каждого идентификатора.

+0

Сохранение значений массивом. Отлично! .. Это работает. Огромное спасибо. – Sigularity

+0

Добро пожаловать! – hek2mgl

0

@Sigularity: решение hek2mgl отлично работает и работает отлично, только оно может не дать вам результатов в соответствии с порядком, в котором идентификаторы работы находятся в Input_file, если вам нужен тот же порядок, что и идентификаторы JOB, в Input_file, тогда вы мог бы попробовать следовать тоже на том же.

awk -F"/" 'FNR==NR{A[$1]=$0;next} ($1 in A){print A[$1];delete A[$1]}' Input_file Input_file 

Я делаю полевой сепаратор «/» здесь. Условие проверки FNR == NR (убедитесь, что выполняемые команды должны запускаться только при чтении первого файла Input_file.) создание массива с именем A, индекс которого равен $ 1, и упоминание следующего здесь, что гарантирует, что дальнейшие операторы не должны выполнять , Теперь помещаем ($ 1 в A) {, который будет выполнен только тогда, когда считывается 2-й файл Input_file.} проверяет, присутствует ли первое поле первого массива в массиве A, затем распечатайте A [$ 1] и удалите A [$ 1] (до избегайте дубликатов значений массива A).

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