Я только что написал самую искаженную команду, которую я когда-либо писал, и я хочу знать, как я могу сделать это лучше.
Я написал это:
grep -E '00[7-9]\.|0[1-9][0-9]\.' filename.log | awk '{print $6}' | sed 's/\(.*\):.*/\1/' | sort | uniq -c | sort -rn
Пример ввода:
2011/06/30 07:59:43:81 20626 code_file.c (252): FunctionName: 009.63 seconds
По сути, он просматривает файл журнала, в котором указано количество секунд, которое потребовалось команде для выполнения, и захватывает любую из них, выполнение которой занимает от 7 до 99 секунд. Затем awk печатает шестое слово, которое является именем функции, за которым следует двоеточие. Затем sed удаляет двоеточие и все оставшиеся пробелы, затем сортируется, подсчитывается, а затем сортируется по количеству.
Я использую HP-UX, поэтому некоторые из моих инструментов ограничены, но я знаю, что awk может делать то же, что я только что сделал с sed. Может ли кто-нибудь помочь мне разобраться с моей командой?