Intereting Posts
LDAP: локальный и удаленный пользователь с одинаковым именем пользователя Проблема с использованием головы для удаления последней строки файла выполнить chmod во время загрузки на безголовом debian Как отключить мой монитор от выключения и каждые несколько секунд, когда он должен быть в режиме DPMS? Найти файлы VHost в CentOS Продвинутое программирование в Unix Envinronment 3rd, 4.21, я хочу, как rmdir обрабатывает количество ссылок Есть ли способ отменить команду терминала? Как перенести SVN на git Как отобразить текущую раскладку клавиатуры? Самый маленький дистрибутив Linux для PPTP VPN-сервера (poptop)? Разделение одного файла на несколько файлов на основе совпадающих строк в Linux Как создать Linux-систему только для чтения, которая только записывает в ОЗУ? Как я могу безопасно удалить содержимое флэш-накопителя, чтобы данные не могли быть восстановлены. Как удалить 1 диск из массива RAID-5 mdadm? Вывод сообщений о завершении работы на несколько консолей

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

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

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

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

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

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

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 

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