Дополнительно
Сортировка на основе третьего столбца
Я'сталкиваюсь с огромным файлом с 4 колонками. Я'хочу вывести отсортированный файл в stdout на основе его 3-го столбца:
cat myFile | sort -u -k3
Достаточно ли этого для выполнения трюка?
137
6
отобразит файл, отсортированный по столбцу 3rd, предполагая, что столбцы разделены последовательностями пробелов (символы ASCII SPC и TAB в локали POSIX/C), в соответствии с порядком сортировки, определенным текущей локалью.
Обратите внимание, что ведущие пробелы включены в столбец (разделителем по умолчанию является переход от пробела к пробелу), что может иметь значение в локалях, где пробелы не игнорируются для целей сравнения, используйте опцию
-b
для игнорирования ведущих пробелов.Обратите внимание, что это совершенно не зависит от оболочки (все оболочки будут анализировать эту командную строку одинаково, оболочки обычно не имеют встроенной команды
sort
).-k 3
- это сортировка по части строк, начинающихся со столбца 3rd (включая ведущие пробелы). В локали C, поскольку символы пробела и табуляции стоят перед всеми печатаемыми символами, это даст тот же результат, что и-k 3,3
(за исключением строк, имеющих одинаковое третье поле),-u
- это сохранение только одной из строк, если есть несколько строк, которые сортируются одинаково (то есть когда ключ сортировки сортирует одинаково (это не обязательно то же самое, что быть одинаковым)).cat
- это команда для concatenate. Здесь она не нужна.Если столбцы разделены чем-то другим, вам понадобится опция
-t
, чтобы указать разделитель.Приведенный пример файла
a
С
-u -k 3
:Строки 2 и 3 имеют одинаковый третий столбец, но здесь ключ сортировки - от третьего столбца до конца строки, поэтому
-u
сохраняет обе.␠ca␠d
сортирует перед␠c␠c
, потому что пробелы игнорируются при первом проходе в моей локали,cad
сортирует передcc
.Выше только один сохраняется для тех, где 3-й столбец -
␠c
. Обратите внимание, как сохраняется тот, в котором␠␠c
(2 ведущих пробела).Посмотрите, как меняется порядок следования
a b c d
иa c c
. В первом случае, поскольку␠c␠c
сортирует перед␠c␠d
, во втором случае, поскольку ключ сортировки одинаковый (␠c
), сравнение последней инстанции, которое сравнивает строки полностью, ставитa b c d
передa c c
.Когда мы игнорируем пробелы, ключ сортировки для первых трех строк одинаковый (
c
), поэтому они отсортированы по последнему варианту сравнения.В локали C,
␠␠c
сортирует перед␠c
, так как там есть только один проход, где символы (затем отдельные байты) сортируются на основе их значения кодовой точки (где пробел имеет более низкую кодовую точку, чемc
).Если вы понимаете "столбец" как текстовый файл (4-й символ), то да, ваше решение должно работать (или даже
sort -u -k3 myFile
, чтобы позволитьsort
выполнять некоторые магические действия по экономии памяти при случайном доступе). Если вы понимаете "столбец" как базу данных - целая единица данных, за которой следует разделитель, и переменная ширина столбца, то вам понадобится что-то более сложное, например, сортировка ls -l по размеру.(что эквивалентно тривиальному
ls -lS
, но хорошо подходит для данного примера).это правильная команда для сортировки любого списка с числовыми символами по определенному столбцу.
когда ваш разделитель
:
и вам нужно отсортировать файл "имя файла" в 3<суп>РД</с SUP> В поле.Можно использовать на awk библиотека велюр:
в
Будет сортировать ваш файл myfile в третьем столбце, если ваш файл Дон'Т есть какие-либо разделителя.
страницы сортировки:
[...] -к ... ключ=POS1[,POS2] запустить ключ в POS1 (происхождения 1), конец его в POS2 (по умолчанию конец строки) [...] POS является Ф[.С][ОПЦ], где F-поле и С положение символа в поле, как происхождение 1. Если ни -Т, ни -в силу, символов в поле отсчитываются от начала предыдущего пробелом. ОПЦ-это один или несколько однобуквенные варианты заказа, которые переопределяют глобальные параметры заказ для этого ключа. Если ключ не дали, используйте всю строку в качестве ключа.
С --ки=1.3,1.3, вы сказали, что есть только одно поле (всей линейки) и что вы'вновь сравнивая положения третьего символа в этом поле.