Я имею этот простой текстовый файл и хочу отсортировать все строки по response_time
столбец:
1 console-2017_09_17.log:2017-09-17 00:04:02,507:INFO :pool-8982-thread-30:r.a.u.j.PerfRequestInterceptor - method=GET, uri==43975&items, response_time=1030, response_code=300
2 console-2017_09_17.log:2017-09-17 00:04:02,628:INFO :pool-8982-thread-77:r.a.u.j.PerfRequestInterceptor - method=GET, uri==PBD4766&items, response_time=1142, response_code=200
3 console-2017_09_17.log:2017-09-17 00:04:02,651:INFO :pool-8982-thread-67:r.a.u.j.PerfRequestInterceptor - method=GET, uri==MDC1810C&items, response_time=1166, response_code=200
4 console-2017_09_17.log:2017-09-17 00:04:02,655:INFO :pool-8984-thread-47:r.a.u.j.PerfRequestInterceptor - method=GET, uri==1031086&items, response_time=1005, response_code=200
5 console-2017_09_17.log:2017-09-17 00:04:02,668:INFO :pool-8984-thread-50:r.a.u.j.PerfRequestInterceptor - method=GET, uri==F1018P&items, response_time=1018, response_code=200
6 console-2017_09_17.log:2017-09-17 00:04:02,677:INFO :pool-8983-thread-86:r.a.u.j.PerfRequestInterceptor - method=GET, uri==V2581261&items, response_time=1060, response_code=200
7 console-2017_09_17.log:2017-09-17 00:04:02,681:INFO :pool-8982-thread-68:r.a.u.j.PerfRequestInterceptor - method=GET, uri==202581&items, response_time=1196, response_code=200
8 console-2017_09_17.log:2017-09-17 00:04:02,686:INFO :pool-8984-thread-46:r.a.u.j.PerfRequestInterceptor - method=GET, uri==1563200600&, response_time=1036, response_code=200
9 console-2017_09_17.log:2017-09-17 00:04:02,693:INFO :pool-8983-thread-29:r.a.u.j.PerfRequestInterceptor - method=GET, uri==8DB355025371, response_time=1207, response_code=200
Я попробовал его этот путь:
sort -n -t " " -k 8 myfile.txt
Но я все еще получил неотсортированный файл. Почему?
UPD: Время может быть меньше чем 1 000 и больше чем 9 999:
1 console-2017_09_17.log:2017-09-17 00:04:02,507:INFO :pool-8982-thread-30:r.a.u.j.PerfRequestInterceptor - method=GET, uri==43975&items, response_time=11030, response_code=300
2 console-2017_09_17.log:2017-09-17 00:04:02,628:INFO :pool-8982-thread-77:r.a.u.j.PerfRequestInterceptor - method=GET, uri==PBD4766&items, response_time=1142, response_code=200
3 console-2017_09_17.log:2017-09-17 00:04:02,651:INFO :pool-8982-thread-67:r.a.u.j.PerfRequestInterceptor - method=GET, uri==MDC1810C&items, response_time=1166, response_code=200
4 console-2017_09_17.log:2017-09-17 00:04:02,655:INFO :pool-8984-thread-47:r.a.u.j.PerfRequestInterceptor - method=GET, uri==1031086&items, response_time=1005, response_code=200
5 console-2017_09_17.log:2017-09-17 00:04:02,668:INFO :pool-8984-thread-50:r.a.u.j.PerfRequestInterceptor - method=GET, uri==F1018P&items, response_time=1018, response_code=200
6 console-2017_09_17.log:2017-09-17 00:04:02,677:INFO :pool-8983-thread-86:r.a.u.j.PerfRequestInterceptor - method=GET, uri==V2581261&items, response_time=1060, response_code=200
7 console-2017_09_17.log:2017-09-17 00:04:02,681:INFO :pool-8982-thread-68:r.a.u.j.PerfRequestInterceptor - method=GET, uri==202581&items, response_time=1196, response_code=200
8 console-2017_09_17.log:2017-09-17 00:04:02,686:INFO :pool-8984-thread-46:r.a.u.j.PerfRequestInterceptor - method=GET, uri==1563200600&, response_time=1036, response_code=200
9 console-2017_09_17.log:2017-09-17 00:04:02,693:INFO :pool-8983-thread-29:r.a.u.j.PerfRequestInterceptor - method=GET, uri==8DB355025371, response_time=7, response_code=200
UPD2: я, уменьшают параметр uri
. Это может содержать различные числа "=".
sort -t " " -k 8 myfile.txt
выводы к терминалу желаемый результат. Вы не должны использовать -n
параметр, потому что поле, по которому Вы хотите отсортировать, не содержит только цифры.
sort
берет в качестве разделителя вообще, Вы даете его, поэтому просто даете ему правильную вещь:
sort -n -t "=" -k5
вид численно после четвертого =
.
Как нет, ничто в пути просто не отбрасывает -n
, а также -t
опция:
sort -k 8 myfile.txt
<час> , Если Вы однако хотите знать, почему Ваш неудавшийся путь, позвольте нам --debug
:
> sort -n -t " " -k 8 --debug myfile.txt
sort: using simple byte comparison
sort: key 1 is numeric and spans multiple fields
1 console-2017_09_17.log:2017-09-17 00:04:02,507:INFO :pool-8982-thread-30:r.a.u.j.PerfRequestInterceptor - method=GET, uri==43975&items, response_time=1030, response_code=300
^ no match for key
________________________________________________________________________________________________________________________________________________________________________________
… … …
Это показывает, что существует что-то не так с Вашим KEYDEF
:
KEYDEF является F [.C] [ВЫБИРАЕТ] [F [.C] [ВЫБИРАЕТ]] запуск и положение остановки, где F является полевым числом и C позиция символа в поле; оба - источник 1, и значения по умолчанию положения остановки к концу строки. Если ни-t, ни-b не в действительности, символы в поле считаются с начала предыдущего пробела. ВЫБИРАЕТ одна или несколько однобуквенных опций упорядочивания [bdfgiMhnRrV], которые переопределяют глобальные опции упорядочивания для того ключа. Если никакой ключ не дан, используйте всю строку в качестве ключа. Используйте - отладка для диагностирования неправильного ключевого использования.
Для Вашего случая это было бы правильным:
sort -n -t " " -k 8.15,8.19 myfile.txt
sort -k8V ex.txt
, где
-k8V
средства: ключ 8.th поле, и критерии порядка являются "видом версии" , вид Версии является самым естественным видом - использует алфавитный вид для букв, но переключается на числовой вид, когда число появляется (это работает и на числа, слова, и смешанный)