CaseWorkerName
- это столбец 11. Утилите sort
можно указать, по какому столбцу сортировать и какой разделитель использовать при указании столбцов:
$ sort -t ',' -k11,11 data.in
Это сообщит ] sort
для использования запятых в качестве разделителей и сортировки в возрастающем лексикографическом порядке по столбцам с 11 по 11 (т.е. только по столбцу 11).
Вывод записывается в консоль. Если вы хотите сохранить вывод в другом файле, используйте
$ sort -t ',' -k11,11 -o data.out data.in
. Можно указать data.in
в качестве файла вывода, если для этого вы используете флаг -o
.
Если вы хотите избежать сортировки первой строки (она может содержать заголовки столбцов), тогда мы должны сначала отделить заголовок от данных:
$ head -n 1 data.in >data.header
$ sed '1d' data.in >data.unsorted
Затем отсортировать и объединить отсортированные данные с заголовком:
$ sort -t ',' -k1,11 -o data.sorted data.unsorted
$ cat data.header data.sorted >data.out
$ rm data.sorted data.header data.unsorted
Или , короче
$ sed '1d' data.in | sort -t ',' -k11,11 -o data.sorted
$ head -n 1 data.in | cat - data.sorted >data.out
$ rm data.sorted
Если вы работаете в системе Linux с использованием GNU coreutils, это можно сделать еще короче,
$ ( head -n 1; sort -t ',' -k11,11 ) <data.in >data.out
С помощью реализации GNU coreutils head
, стандартный ввод для подпроцесса ( (...)
) сначала будут использованы head
, а все оставшиеся данные будут переданы sort
. Результатом подпроцесса будет вывод из head
, за которым следует вывод из sort
.
В других системах head
может потреблять больше, чем ожидалось, из стандартного входного потока, что не даст sort
ничего (или, по крайней мере, остальной части файла) для работы. . Так обстоит дело по крайней мере с OpenBSD.
Результат находится в data.out
после каждого примера выше.
Обратите внимание: все эти подходы потерпят неудачу, если данные в любом столбце содержат запятую ...
Если шаблон остается прежним , вы можете использовать
grep -B 3 '# 0 hits found'
Это напечатает все строки, содержащие # 0 найденных совпадений
и три строки до совпадения.
Различные совпадения разделены строкой, состоящей из --
. Поэтому вы можете добавить | grep -v '^--'
к команде.