Совмещение и того и другого в строке с несколькими столбцами в Unix

Вопрос или проблема

В папке находится более 200 файлов, где в некоторых из них встречается следующий шаблон в записях:

ABCD<Пробел><tab><Пробел>,EFGH,<ПРОБЕЛ>,

Не изменяя и не заменяя его, я просто хочу узнать количество файлов с этим форматом.

Grep имеет режим регулярных выражений Perl (-P) и подсчет (-c)

$ grep -c -P 'ABCD\ \t\ ,EFGH,\ ,' file
1

Попробуйте это, чтобы узнать количество файлов, содержащих шаблон

grep -rlP "ABCD \t ,EFGH, " directory | wc -l
  • r рекурсивный поиск по файлам
  • P режим Perl
  • l вывод имени каждого входного файла, из которого обычно выводился бы результат. Сканирование остановится на первом совпадении.
  • подсчет строк

Чтобы получить список файлов:

grep -rlP "ABCD \t ,EFGH, " directory | awk -F "https://unix.stackexchange.com/" '{print $2}' 

Эта команда подсчитывает количество файлов в текущем каталоге, которые содержат совпадения с вашим шаблоном:

grep -Psl 'ABCD \t ,EFGH, ,' * | wc -l

(Как и большинство других решений, оно будет неправильно учитывать файлы, содержащие встроенные переводы строк в их имени. В мире GNU вы можете использовать grep -PZsl '...pattern...' * | tr '\n\0' 'X\n' | wc -l для исправления этого.)

С zsh

(cd folder && grep -l $' \t ' ./*(D.)) | grep -c /

Эта команда подсчитает количество обычных файлов в директории folder, содержащих хотя бы одно вхождение <пробел><tab><пробел>.

Рекурсивно:

(cd folder && grep -l $' \t ' .//**/*(D.)) | grep -c //

Рекурсивно, можно также использовать find:

(cd folder && find .//. -type f -exec grep -l $' \t ' {} +) | grep -c //

Если вы хотите учитывать только файлы, где <пробел><tab><пробел> найден в первом столбце, измените шаблон на $'^[^,]* \t '.

Ответ или решение

Чтобы решить задачу по подсчету количества файлов в Unix, содержащих в своих записях определенный шаблон, например, "", важно понять основные команды и аргументы, позволяющие эффективно находить и идентифицировать такие файлы. Давайте рассмотрим, как можно решить эту задачу, используя утилиты Unix, такие как grep, find, и Shell скрипт.

Теория

1. Grep

grep — это мощная утилита командной строки, используемая для поиска текста или строк в одном или нескольких файлах, которые соответствуют заданному регулярному выражению. В зависимости от используемых аргументов, grep может выполнять различные задачи, от базового поиска текстовых вхождений до более сложной фильтрации и отображения. Вот основные опции, важные для нашей задачи:

  • -r: Выполняет рекурсивный поиск. Полезен, когда нужно искать в подкаталогах.
  • -l: Выводит только имена файлов, в которых нашелся шаблон.
  • -P: Позволяет использовать Perl-совместимые регулярные выражения для более сложных шаблонов поиска.
  • -c: Подсчитывает количество строк, которые совпадают с шаблоном в каждом файле.

2. Perl-совместимые регулярные выражения

Perl-совместимые регулярные выражения отличаются своей выразительностью и возможностью использования расширенных символов и форм. Это позволяет сделать поиск более точным и гибким. В нашем случае использование \t позволяет указывать на табуляцию, а пробелы можно представить через символы пробела, такие как \s.

3. Команда Find

find — это утилита, которая может искать файлы в каталогах, соответствующие заданным критериям. Совместно с grep, find можно использовать для осуществления рекурсивного поиска и выполнения команд над найденными файлами.

  • -type f: Ищет только файлы и исключает каталоги из поиска.
  • -exec: Позволяет выполнять команды для найденных файлов.

Пример

Рассмотрим пример использования команды grep для поиска файлов, содержащих данный шаблон в текущем каталоге:

grep -Psl 'ABCD \t ,EFGH, ' * | wc -l

Этот пример демонстрирует использование grep для поиска по указанному шаблону в режиме Perl-совместимых регулярных выражений. Команда wc -l затем подсчитывает количество строк в результате, effectively сообщая количество файлов, содержащих искомую строку.

Применение

1. Основная задача

Задача состоит в том, чтобы без изменения файлов определить количество файлов, содержащих определенный шаблон. Для этого можно использовать приведенные выше команды, чтобы выполнить поиск и подсчет соответствий.

2. Практическое использование

Простой и эффективный способ — запустить команду из командной строки, как продемонстрировано в примере. Однако это решение можно интегрировать в скрипт для автоматизации задачи:

#!/bin/bash

# Путь к каталогу
directory="/путь/к/каталогу"

# Поиск и подсчет файлов с нужным шаблоном
file_count=$(grep -rlP "ABCD \t ,EFGH, " "$directory" | wc -l)

echo "Количество файлов с нужным шаблоном: $file_count"

Элемент автоматизации позволяет использовать скрипт в CRON job, что удобно при частых находках и проверках указанного шаблона.

Заключение

Для профессионалов, работающих с большими объемами данных, таких как 200+ файлов, важно обладать инструментами, которые помогают эффективно управлять задачами поиска и анализа файлов. Использование команд Unix, таких как grep и find, позволяет не только решать задачи поиска, но и автоматизировать рутинные операции благодаря возможностям shell скриптов и других утилит. Таким образом, любая задача, связанная с поиском и оценкой наличия определенных данных, становится более управляемой и надежной.

Оцените материал
Добавить комментарий

Капча загружается...