Как вы обрезаете все столбцы в файле определенной длины?

Этот текст с колонками в файле, который ограничен определенным символом, как вы обрезаете ширину либо определенного столбца (столбцов), либо всех столбцов?

Вариант использования заключается в том, что я читаю некоторые файлы журналов, которые имеют столбцы с разделителями пространства. Некоторые столбцы в журнале – очень длинные URL-адреса, которые затрудняют чтение файла. Меня не волнует весь контент URL-адресов, поэтому я хотел бы усечь длину этих столбцов на что-то более читаемое.

Мне было бы интересно узнать, как указать конкретные столбцы для усечения, но на самом деле мне нужно только выяснить, как просто усечь все столбцы с длиной больше N.

До сих пор я нашел utils column , colrm и cut , которые, похоже, похожи на это, но ничего, что делает то, что я ищу.

(Оптимально, если есть скомпилированная утилита, которая уже делает это, это было бы лучше, но я также был бы рад найти способ сделать это с помощью sed , awk , perl и т. Д.).

2 Solutions collect form web for “Как вы обрезаете все столбцы в файле определенной длины?”

sed 's/\([^,]\{0,3\}\)[^,]*/\1/g' усечет каждый столбец до первых трех символов. Столбцы разделены символом ','.

Как это работает:

  1. Он находит (жадную) строку, состоящую из 0-3 символов, отличных от ',' и запоминает ее как первую группу (по ссылке \ 1)

  2. Затем он пытается найти как можно больше символов, кроме «,».

  3. Все это заменяется группой 1 (это первые 3 символа).

  4. Из-за опции g он будет делать это несколько раз в каждой строке, усекая все столбцы, а не только первый.

РЕДАКТИРОВАТЬ:

Как указано в комментарии, 1-й шаг можно оптимизировать, если вы используете ([^,]\{3\}\) . Таким образом, мы сопоставляем ровно 3 символа. Если их меньше, нам все равно, поскольку нам не нужно усекать это поле. Итак, последняя команда:

 `sed 's/\([^,]\{3\}\)[^,]*/\1/g'` 

Я могу представить, что не важно, чтобы файл был структурирован в столбцах, поскольку вы написали, что вас раздражают длинные URL-адреса. По крайней мере, в случае разбора файла вместо его просмотра.

В этом случае мое решение

 perl -pe 's%(http://\S+)%substr($1, 0, 15)%ge' <file_with_long_urls> | column -t 

Это удаляет все символы URL-адреса за пятнадцатым символом после http:// .

Если столбцы не ограничены пробелами, но с символом & (который обозначает произвольный разделитель), мое решение выглядит так:

 perl -pe 's%(http://\S+?)(?=&|$)%substr($1, 0, 15)%ge' <file_with_long_urls> | column -s '&' -t 

Может быть, вы можете работать с этим !?

Interesting Posts

Как извлечь часть имени файла в awk-скрипте

Не удалось найти libmount, когда кросс-компиляция glib

Безопасно ли для программы добавить свой каталог bin в PATH?

Набор результатов запроса Mysql в сценарии bash

Правильное расположение файла initramfs.cpio при компиляции ядра

несколько контейнеров lxc, совместно использующих один и тот же пул ресурсов процессора и памяти

закрытие дескрипторов нежелательных файлов

Заменить с sed до совпадения в строке

Как получить название веб-сайта с помощью командной строки?

Как изменить язык для команды man?

Дублирование включает / исключает каталоги и символические ссылки

как исследовать блокированный исходящий TCP-порт Firewall

Какое обоснование оболочки bash не предупреждает вас об арифметическом переполнении и т. Д.?

X искажает прямоугольник вокруг моего указателя мыши

как я могу извлечь имя SubDir 4 deep & put в использование Var 4 позже?

Linux и Unix - лучшая ОС в мире.