Решение только для Linux для переотображения ключей в масштабе всей системы состоит в том, чтобы записать простое правило udev. Это не будет зависеть от X, будет работать над любым терминалом или приложением и портативно между любыми недавними установками Linux путем простого копирования двух файлов.
Необходимо записать 2 файла: один содержащий правило udev, которое говорит ядру повторно отображать ключи и один содержащий фактические отображения, в которых Вы нуждаетесь.
Используя этот метод я повторно отобразил свою целую клавиатуру, возможно, код полезен как вдохновение https://github.com/10ne1/carpalx-keyboard
sort -k 3,3 myFile
отобразил бы файл, отсортированный по 3-му столбцу, предполагающему, что столбцы разделяются последовательностями пробелов (ASCII SPC и Символы табуляции в локали POSIX/C), согласно порядку сортировки, определенному текущей локалью.
Обратите внимание, что начальные пробелы включены в столбец (разделитель по умолчанию является переходом от непробела до пробела), который может иметь значение в локалях, где пробелы не проигнорированы в целях сравнения, используйте -b
опция проигнорировать начальные пробелы.
Обратите внимание, что это абсолютно независимо от оболочки (все оболочки проанализировали бы ту командную строку то же, оболочки обычно не имеют sort
команда встроила).
-k 3
должен отсортировать на части строк, запускающихся с 3-го столбца (включая начальные пробелы). В локали C, потому что пробелы и разряды символов табуляции перед всеми печатаемыми символами, которые будут обычно давать Вам тот же результат как -k 3,3
(за исключением строк, которые имеют идентичное третье поле),
-u
должен сохранить только одну из строк, если существуют несколько, что вид тождественно (это - то, где ключ сортировки сортирует то же (это - не обязательно то же, как являющееся равным)).
cat
команда должна конкатенировать. Вам не нужен он здесь.
Если столбцы разделяются чем-то еще, Вам нужно -t
опция указать разделитель.
Учитывая файл в качестве примера a
$ cat a
a c c c
a b ca d
a b c e
a b c d
С -u -k 3
:
$ echo $LANG
en_GB.UTF-8
$ sort -u -k 3 a
a b ca d
a c c c
a b c d
a b c e
Строка 2 и 3 имеет тот же третий столбец, но здесь ключ сортировки из третьего столбца в конец строки, таким образом, -u
сохраняет обоих. ␠ca␠d
виды прежде ␠c␠c
потому что пробелы проигнорированы в первичной обработке в моей локали, cad
виды прежде cc
.
$ sort -u -k 3,3 a
a b c d
a b c e
a b ca d
Выше только одного сохраняется для тех, где 3-й столбец ␠c
. Отметьте как тот с ␠␠c
(2 ведущих пробелов), сохраняется.
$ sort -k 3 a
a b ca d
a c c c
a b c d
a b c e
$ sort -k 3,3 a
a b c d
a c c c
a b c e
a b ca d
Посмотрите как порядок a b c d
и a c c c
инвертируются. В первом случае, потому что ␠c␠c
виды прежде ␠c␠d
, во втором случае, потому что ключ сортировки является тем же (␠c
), сравнение последнего средства, которое сравнивает строки полностью, помещает a b c d
прежде a c c c
.
$ sort -b -k 3,3 a
a b c d
a b c e
a c c c
a b ca d
После того как мы игнорируем пробелы, ключ сортировки для первых 3 строк является тем же (c
), таким образом, они отсортированы по сравнению последнего средства.
$ LC_ALL=C sort -k 3 a
a b c e
a c c c
a b c d
a b ca d
$ LC_ALL=C sort -k 3,3 a
a b c e
a b c d
a c c c
a b ca d
В локали C, ␠␠c
виды прежде ␠c
как существует только одна передача там, где символы (затем единственные байты) вид на основе их значения кодовой точки (где пространство имеет более низкую кодовую точку, чем c
).
Если Вы понимаете "столбец" как в текстовом файле (4-й символ) затем да, Ваше решение должно работать (или даже sort -u -k3 myFile
позволить sort
выполните некоторое сохраняющее память волшебство с произвольным доступом). Если Вы поймете "столбец" как в базе данных - целый объект данных, сопровождаемых разделителем и шириной переменного столбца, то Вам будет нужно что-то более необычное, например, это сортирует ls-l по размеру
ls -l |awk '{print $5 " " $0;}'| sort -n | cut -d " " -f 2-
(который эквивалентен тривиальному ls -lS
но служит примеру приятно.)
sort -k 1.3,1.3
. ls -l | sort -k5,5n
к виду на размере.
– Stéphane Chazelas
10.12.2013, 16:30
awk
решение точно, в чем я нуждался - легко измененный для установки сложным требованиям
– jchook
08.11.2017, 04:48
sort -g -k column_number
— это правильная команда для сортировки любого списка, содержащего числовые символы, с использованием определенного столбца
$ sort -k 1.3,1.3 myfile
Ваш файл myfile будет сортироваться по третьему столбцу, если в файле нет разделителя.
$ cat myfile
ax5aa
aa3ya
fg7ds
pp0dd
aa1bb
$ sort -k 1.3,1.3 myfile
pp0dd
aa1bb
aa3ya
ax5aa
fg7ds
своего рода справочная страница:
[...] -k, клавиша --=POS1[,POS2] запустите ключ в POS1 (источник 1 ), завершите его в POS2 (конец строки по умолчанию )[...] POS — это F[.C][OPTS], где F — номер поля, а C — позиция символа в поле; оба являются источником 1. Если ни -t, ни -b не действуют, символы в поле отсчитываются от начала предыдущего пробела. OPTS — это один или несколько вариантов упорядочения отдельных букв -, которые переопределяют глобальные параметры упорядочения для этого ключа. Если ключ не указан, используйте всю строку в качестве ключа.
С помощью --key=1.3,1.3 вы сказали, что есть только одно поле (вся строка )и что вы сравниваете позицию третьего символа этого поля.
sort -t : -k 3 filename
, когда ваш разделитель :
и вам нужно отсортировать файл filename
по полю 3 rd .
blank
- разделенный, который может включать другие символы, кроме того, чтобы расположить с интервалами и снабдить вкладками в зависимости от локали. – jfs 11.12.2013, 02:233,3
? Почему не просто3
? – terdon♦ 11.12.2013, 03:04