напечатайте, если следующая строка содержит

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 после каждого примера выше.

Обратите внимание: все эти подходы потерпят неудачу, если данные в любом столбце содержат запятую ...

1
17.05.2017, 14:53
1 ответ

Если шаблон остается прежним , вы можете использовать

grep -B 3 '# 0 hits found'

Это напечатает все строки, содержащие # 0 найденных совпадений и три строки до совпадения.

Различные совпадения разделены строкой, состоящей из --. Поэтому вы можете добавить | grep -v '^--' к команде.

7
27.01.2020, 23:13

Теги

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