Как grep несколько файлов, используя часть имени файла как шаблон?

У меня есть папка, которая содержит несколько файлов с именем order[ID].log где [ID] – строка, например

 orderID1.log orderID2.log orderID3.log orderID4.log ... 

Мне нужно написать сценарий в Linux, чтобы grep каждого файла по ID в их имени и вывести результат в файл с именем ID.log Пример:
Для orderID1.log мне нужно grep 'ID1' orderID1.log > ID1.log
Для orderID2.log мне нужно grep 'ID2' orderID2.log > ID2.log
Я попытался написать сценарий ниже,

 for i in ORDER*.log do grep 'i' order$i > $i.log; done 

Проблема здесь в том, что я буду записывать как «orderID1», «orderID2», а не «ID1», «ID2». Есть ли простой способ сделать это в Linux?

One Solution collect form web for “Как grep несколько файлов, используя часть имени файла как шаблон?”

Вам нужно будет извлечь подстроку ID из имен файлов. Один из способов сделать это – это расширение параметра, например ${var:offset:length} поэтому в вашем случае var is f ilename, offset – 5 ( order ), а длина – ${#f}-9 (т. Е. Общая длина ${#f} минус объединенная длина order и .log которая равна 9 символам):

 for f in order*.log do ID=${f:5:${#f}-9} grep -- "$ID" "$f" > "$ID".log done 

или если вы предпочитаете один лайнер:

 for f in order*.log; do ID=${f:5:${#f}-9}; grep -- "$ID" "$f" >" $ID".log; done 

Кроме того, вы можете использовать awk для применения одного и того же действия к нескольким файлам :

 awk ' FNR==1{ if(fname)close(fname) id=substr(FILENAME, 6, length(FILENAME)-9) fname=id".log" } $0 ~ id{ print > fname } ' order*.log 

Это делает все файлы с одним вызовом awk , избегая цикла оболочки. В одной строке:

 awk 'FNR==1{if(f)close(f);id=substr(FILENAME, 6, length(FILENAME)-9);f=id".log"} $0~id{print > f}' order*.log 
  • Трубопровод с grep и найти отпечатки числа перед результатом
  • Как получить общее количество строк и уникальных счетчиков в одной строке
  • Перечисление определенных строк в перечисленных файлах
  • Почему добавление двоеточия нарушает этот шаблон grep?
  • Вырезать имя файла и результат поиска grep из пути
  • Как grep не последовательные шаблоны
  • найти все файлы cpp и перечислить только те файлы с именами, которые соответствуют шаблону (regex), не работают
  • Разделить команду и аргументы и вставить в переменную в сценарий bash
  • Границы слова Grep
  • Поиск номера в тексте
  • найти и заменить значение в строке текста
  • Interesting Posts

    Как разрешить доступ к сети только через прокси?

    Пакет «fontconfig» не найден, несмотря на то, что установлен libfontconfig1-dev

    Требуется уточнение при перезагрузке apache

    Удалить несколько регулярных выражений из переменной с помощью sed

    Почему каждая папка процесса в / proc содержит одну и ту же информацию?

    Зондирование SSH-соединения и обнаружение ssh-соединения или выхода из системы

    Значение «target» в определениях виртуальной виртуальной машины virsh.

    Как я могу ограничить количество ядер процессора, которые пользователь может использовать в любой момент в Linux?

    rm -rf все файлы и все скрытые файлы. & .. ошибка

    Как связать файлы .doc с LibreOffice Writer

    Как глобально настроить безопасные клиенты с помощью OpenSSL на Oracle Linux 5 / RHEL 5?

    одновременные крепления devpts

    Как сохранить атрибуты файла Windows при копировании файлов в Linux?

    Можно ли отключить в Linux Mint «руку» мыши, которая перемещает окна

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

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