Использование Uniq -c с регулярным выражением или подсчет количества удаленных строк

Не совсем ответ на вопрос о длине строки режима, но обходной путь:

В итоге я использовал коды ANSI CSI для сохранения и восстановления позиции курсора. (Спасибо @tripleee за указатель).

Я все еще не мог найти длину строки режима, даже когда пытался получить позицию курсора с помощью PS1=$(getColumn), где getColumn - это различные вещи, которые я пробовал на основе:

Мой обходной путь с использованием кодов ANSI CSI можно найти как в ответе на "Right align part of prompt".

Я очень доволен этим обходным решением, поскольку мне удалось сделать это без единого подпроцесса, и сделать его shellcheck-чистым.

1
03.08.2017, 13:17
2 ответа

Я не уверен, чего именно вы хотите, поскольку вы слишком зациклены на сортировке/уникализации.

Однако, если все, что вам нужно, это обрезать повторяющиеся строки, например, 4,5,6 и 8,9,10, тогда вы можете сделать это в своем последнем файле, который вы показываете, который содержит строки //NODECLASS:

perl -F\" -lane '
   print,next if $. < 3;
   print if ! $h{($F[1] =~ /:(.*?):/)[0]}++;
' NODE_CLASS_file

где первые 2 строки пропущены. В остальном мы смотрим на 2-е поле, число между:/:(.*?):/предоставит вам число, после чего вам нужно попасть в скалярный контекст, поместив его в (...)[0]и передать его как ключ к хешу %h. Печатать текущую строку, только если этот ключ еще не был замечен.

0
28.01.2020, 00:51

Мне удалось найти грубое решение, в котором я добавляю начальные -конечные позиции в файл вкладок в виде отдельного столбца. Затем при создании файла Nodeclass я также извлекаю этот столбец и использую sort | uniq -c на основе этого вместо столбца последовательности. Кажется, он делает то, что я хотел, но немного медленнее, потому что скрипт, создающий файл вкладки, должен создать целый дополнительный столбец! Спасибо:)

0
28.01.2020, 00:51

Теги

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