Позволить date
сделайте работу!
date +%3j
Затем для миллидневной части простой прием должен вычислить 1000 плюс число миллидней и снять продвижение 1
. Таким образом для Вашего сценария:
s=$(($(date +"%H*3600+%M*60+%S")))
t=$(($s * 5 / 432 + 1000))
date "+%Y'%3j'${t#1}"
Ключевая спецификация как -k2
средства взять все поля от 2 в конец строки во внимание. Так Villamor 44
заканчивается прежде Villamor 50
. Так как эти два не равны, первое сравнение в sort -k2 -k1
достаточно должен отличить эти две строки и второй ключ сортировки -k1
не вызывается. Если два Villamors имели тот же возраст, -k1
заставил бы их быть отсортированными по имени.
К виду отдельным столбцом использовать -k2,2
как ключевая спецификация. Это означает использовать поля от № 2 до № 2, т.е. только второе поле.
sort -k2 -k3 <people.txt
избыточно: это эквивалентно sort -k2 <people.txt
. К виду фамилиями затем имена, затем возраст, выполняют следующую команду:
sort -k2,2 -k1,1 <people.txt
или эквивалентно sort -k2,2 -k1 <people.txt
с тех пор существуют только эти три поля, и разделители являются тем же. На самом деле Вы получите тот же эффект от sort -k2,2 <people.txt
, потому что sort
использует целую строку как последнее прибежище, когда все ключи в подмножестве строк идентичны.
Также обратите внимание, что разделитель полей по умолчанию является переходом между непробелом и пробелом, таким образом, ключи будут включать начальные пробелы (в Вашем примере, для первой строки, первый ключ будет "Emily"
, но второй ключ " Bedford"
. Добавьте -b
опция разделить те пробелы:
sort -b -k2,2 -k1,1
Это может также быть сделано на основе на ключ путем добавления b
флаг в конце ключевой спецификации запуска:
sort -k2b,2 -k1,1 <people.txt
Но что-то для мысли: как только Вы добавляете один такой флаг к ключевой спецификации, глобальные флаги (как -n
, -r
...) больше не относятся к ним так, лучше постараться не смешивать флаги на ключ и глобальные флаги.
С GNU sort
Вы делаете это как это, не уверенное в MacOS:
sort -k2,2 -k1 <people.txt
Обновление согласно комментарию. Заключенный в кавычки из man sort
:
-k, --key=KEYDEF
sort via a key; KEYDEF gives location and type
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.
-k
включать столько, сколько это может.
– manatwork
26.10.2012, 11:01
sort
сравнит всю строку. Или с GNU sort
можно использовать -s
для стабильного вида.
– augurar
02.03.2015, 21:08