Выполненный вид управляет в терминале

У меня есть этот файл:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
nickson:x:999:504:instructor:/home/SI/nickson:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
sabina:x:500:500:Joen Doe:/home/joendoe:/bin/bash
student:x:501:501::/home/student:/bin/bash
svi:x:502:500:foo fooo:/home/svi:/bin/bash
tslavova:x:503:500:foo ofoofofo:/home/das:/bin/bash
jbabukov:x:504:500:ofofofo f of of o:/home/adas:/bin/bash
griza:x:505:500:asdasdas:/home/dasd:/bin/bash
moni:x:506:500:adsdasd:/home/dasi:/bin/bash
victoria:x:507:500:asdasd:/home/dadfeia:/bin/bash
kiril:x:508:500:asdasd:/home/kdasdail:/bin/bash

и я хочу отсортировать его лексикографически по третьему полю. Чтобы сделать это, я работаю

sort -t ':' -k3 file.txt

и все выглядит хорошим кроме последних двух строк, где я имею

nickson:x:999:504:instructor:/home/SI/nickson:/bin/bash
nobody:x:99:99:Nobody:/:/sbin/nologin

то, которое я думаю, должно быть в обратных положениях. Некоторые могут объяснить мне, почему это происходит?

0
задан 7 April 2018 в 04:23

1 ответ

Вы не сортируете только по третьему полю. Если Вы не указываете и запускаете и заканчиваете поля, сортировка сделана с помощью запуска поля запуска в конец строки. От man sort:

KEYDEF  is F[.C][OPTS][,F[.C][OPTS]] for start and stop position, where
F is a field number and C a character position in the field;  both  are
origin 1, and the stop position defaults to the line's end. 

Так :... также включен в вид.

Использовать -k3,3 если необходимо отсортировать только на третьем поле:

% sort -t: -k3,3 foo | grep '^n' 
ntp:x:38:38::/etc/ntp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
nickson:x:999:504:instructor:/home/SI/nickson:/bin/bash

С видом GNU можно проверить то, что происходит с --debug:

$ sort -t: -k3,3 foo --debug | tail    
sort: using ‘en_GB.UTF-8’ sorting rules
______________________________________________
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
          __
_________________________________________________
nobody:x:99:99:Nobody:/:/sbin/nologin
         __
_____________________________________
nickson:x:999:504:instructor:/home/SI/nickson:/bin/bash
          ___
_______________________________________________________
$ sort -t: -k3 foo --debug | tail 
sort: using ‘en_GB.UTF-8’ sorting rules
______________________________________________
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
          _______________________________________
_________________________________________________
nickson:x:999:504:instructor:/home/SI/nickson:/bin/bash
          _____________________________________________
_______________________________________________________
nobody:x:99:99:Nobody:/:/sbin/nologin
         ____________________________
_____________________________________

Тире сразу ниже каждой строки показывают сравненный раздел.

5
ответ дан 30 October 2019 в 03:15

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

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