Вид на основе третьего столбца

Решение только для Linux для переотображения ключей в масштабе всей системы состоит в том, чтобы записать простое правило udev. Это не будет зависеть от X, будет работать над любым терминалом или приложением и портативно между любыми недавними установками Linux путем простого копирования двух файлов.

Необходимо записать 2 файла: один содержащий правило udev, которое говорит ядру повторно отображать ключи и один содержащий фактические отображения, в которых Вы нуждаетесь.

Используя этот метод я повторно отобразил свою целую клавиатуру, возможно, код полезен как вдохновение https://github.com/10ne1/carpalx-keyboard

139
10.12.2013, 23:48
5 ответов
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).

174
27.01.2020, 19:29
  • 1
    blank- разделенный, который может включать другие символы, кроме того, чтобы расположить с интервалами и снабдить вкладками в зависимости от локали. –  jfs 11.12.2013, 02:23
  • 2
    Хороший, +1. Могли Вы объяснять что 3,3 ? Почему не просто 3? –  terdon♦ 11.12.2013, 03:04
  • 3
    @terdon, см. расширенное описание с примерами. –  Stéphane Chazelas 11.12.2013, 11:49
  • 4
    @J.F.Sebastian, Вы правы, обновленный ответ. –  Stéphane Chazelas 11.12.2013, 13:56
  • 5
    , для создания его только видом на 3-м, не остальной частью строки, спасибо. –  terdon♦ 12.12.2013, 05:57

Если Вы понимаете "столбец" как в текстовом файле (4-й символ) затем да, Ваше решение должно работать (или даже sort -u -k3 myFile позволить sort выполните некоторое сохраняющее память волшебство с произвольным доступом). Если Вы поймете "столбец" как в базе данных - целый объект данных, сопровождаемых разделителем и шириной переменного столбца, то Вам будет нужно что-то более необычное, например, это сортирует ls-l по размеру

      ls -l |awk '{print $5 " " $0;}'| sort -n | cut -d " " -f 2-

(который эквивалентен тривиальному ls -lS но служит примеру приятно.)

4
27.01.2020, 19:29
  • 1
    нет, столбцами сортировки по умолчанию разделенный пробел, они не символьные столбцы к виду на 3-м символьном столбце, синтаксис был бы: sort -k 1.3,1.3. ls -l | sort -k5,5n к виду на размере. –  Stéphane Chazelas 10.12.2013, 16:30
  • 2
    awk решение точно, в чем я нуждался - легко измененный для установки сложным требованиям –  jchook 08.11.2017, 04:48
sort -g -k column_number 

— это правильная команда для сортировки любого списка, содержащего числовые символы, с использованием определенного столбца

9
27.01.2020, 19:29
$ 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 вы сказали, что есть только одно поле (вся строка )и что вы сравниваете позицию третьего символа этого поля.

0
27.01.2020, 19:29
sort -t : -k 3 filename

, когда ваш разделитель :и вам нужно отсортировать файл filenameпо полю 3 rd .

20
27.01.2020, 19:29

Теги

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