Intereting Posts
любой способ объединить grep и tail для создания таблицы таблицы из командной строки Могу ли я запретить создание файлов с определенными разрешениями? Как я могу использовать Ethernet для мониторинга отказа PPP-соединения 3G-модема? LAN-сервер с двумя сетевыми картами, не может telnet / ping ко второму, даже если он работает crontab нодификация занимает слишком много времени Как получить сертификат на сервере с сервера центра сертификации с использованием запроса OpenSSL? Как создать патч, игнорирующий различия в отступе в коде? Добавляя к тому же массиву в разных циклах, остаются только последние значения Bash 4 Не удается установить ImageMagick на Centos с помощью Yum Softlink в rc0.d работает над poweron, а не выключается решение для поворота файлов журналов Что такое «аргумент без опционов»? Что такое Unix для команды OpenVMS DUMP? Могу ли я поместить несколько окон X в одно большее окно? Программа для двусторонней синхронизации больших файлов (образы дисков VM)

поля фильтра в файле, без постоянного формата записи

У меня есть 3 файла с миллионами записей. Я бы хотел отфильтровать эти файлы, чтобы легче находить некоторые данные. К сожалению, нет единого формата от одной записи к другой. Например:

record1 will contain: ABCDE record2 will contain ABDE record3 will contain BCD 

Единственная общая часть, которая у меня есть, это первые 23 символа, которые содержат некоторый идентификатор (из которых только последние 15 уникальны между записями).

Я хотел бы отфильтровать эти файлы, чтобы содержать идентификатор и часть D. Как я могу это сделать? Я знаю, что разделитель между полями является вкладкой и внутри каждой части, есть запятая.

Пример части D:

 ROAMENT,INT,15 ROAMENT - constant part which identifies the field INT - some value which is a must if ROAMENT exists 15 - some other value which is optional 

perl -ane 'if (/\t(ROAMENT[^\t\n]*)/) { print $F[0], $1, "\n"; }' inputfile

Объяснение:

  • -a вызывает авторасщепление, разбивая поля ввода на массив @F. Любые пробелы разделят поля, если вы хотите только вкладки, вы можете добавить -F"\t"
  • -n вызывает автоматический цикл над вашими входными данными, а не печать строки ввода в конце
  • -e определяет выражение для запуска в каждом цикле
  • Выражение проверяет для <tab> ROAMENT, а затем любые символы до вкладки или новой строки; если он найден, он печатает первое поле из массива авторасширения и найденного поля.