LINUX.ORG.RU

awk в bash сортировка результата

 , ,


0

1

Помогите пожалуйста, два дня ничего не получается. есть лог файл

03:01:29.312 5 process create apple
05:22:42.211 1 process create banana
05:22:42.302 1 process created
06:09:32.083 12 process create apple
05:12:32.759 5 process created
07:21:45.112 11 process create orange
06:09:35.083 12 process created
03:01:25.714 21 process create apple
05:12:32.308 7 process create grape
05:12:32.309 7 process created
05:12:32.300 21 process created
07:25:41.000 11 process created

Надо найти все что связано с apples !но, у всех разный номер процесса. Т.е. я сначала с помощью авк, ищу все строки, где есть яблоки, и выбираю номера процессов, дальше прохожу еще раз файл уже для поиска времени каждого процесса, который был связан с яблоками. Вот на этом этапе пытался сортировать , и оно сортирует итерацию цикла, но не полный результат. как сделать чтобы после прохождения всего цикла оно отсортировало именно полный результат Ожидаемый результат

03:01:25.714 21 process create apple
03:01:29.312 5 process create apple
05:12:32.300 21 process created
05:12:32.759 5 process created
06:09:32.083 12 process create apple
06:09:35.083 12 process created

Попытка скрипта:

a=($(awk '{if($5 == "apple"){print $2}}' stack.log))
for i in "$a[@}}"
do
    :
awk -v search="$i" '$0~search{print $1}' stack.log
done 



Последнее исправление: laverka (всего исправлений: 1)

awk очень хороший язык для парсинга текста, лучше sh, не надо его недооценивать.

apple.awk

$5=="apple" { procs[$2]=true; print; next; }
$2 in procs { print; }
{}
запуск
awk -f apple.awk < stack.log | sort -s -k1,1

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

Спасибо большое

Я скорее его не знаю, а не недооцениваю :) спасибо Вам за помощь.. я сначала тоже хотел все сделать awk, но увы не смог, как оказалось с bash, я тоже не смог..но я с ним знаком всего 2 дня, потому верю. что еще все впереди.

laverka
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.