Неправильно сортировка текстового файла

Я имею этот простой текстовый файл и хочу отсортировать все строки по 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. Это может содержать различные числа "=".

-6
задан 18 September 2017 в 04:49

4 ответа

sort -t " " -k 8 myfile.txt выводы к терминалу желаемый результат. Вы не должны использовать -n параметр, потому что поле, по которому Вы хотите отсортировать, не содержит только цифры.

-1
ответ дан 2 November 2019 в 06:09

sort берет в качестве разделителя вообще, Вы даете его, поэтому просто даете ему правильную вещь:

sort -n -t "=" -k5

вид численно после четвертого =.

0
ответ дан 2 November 2019 в 06:09

Как нет, ничто в пути просто не отбрасывает -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
0
ответ дан 2 November 2019 в 06:09
sort -k8V ex.txt

, где

  • -k8V средства: ключ 8.th поле, и критерии порядка являются "видом версии"

, вид Версии является самым естественным видом - использует алфавитный вид для букв, но переключается на числовой вид, когда число появляется (это работает и на числа, слова, и смешанный)

0
ответ дан 2 November 2019 в 06:09

Другие вопросы по тегам:

Похожие вопросы: