1

У меня проблема с запуском файлов журнала.

Я пытаюсь использовать ls для создания списка файлов в каталоге журнала и grep для запуска для определенных случаев / раз, когда файл запускался. Мне нужна только последняя строка каждого файла, поэтому я хочу, чтобы команда tail -1 выполнила список предоставленных файлов grep .

Я пробовал несколько комбинаций кода, с которыми столкнулся, но пока мне не повезло; на данный момент это стало больше любопытством, чем полезным из-за количества времени, которое я потратил на это. Ниже приведено несколько примеров попыток:

ls | grep 2011_.._.._.._35_.* | tee >(tail -1)
ls | tee >(grep 2011_.._.._.._35_.*) | tail -1

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

1 ответ1

1

REVISED!

Я перечитал, что вы хотите только последнюю строку каждого файла журнала ...

Вам нужна xargs не tee:

 ls | grep '2011_.._.._.._35_.*' | xargs -n 1 -- tail -1

или же

 ls -1 2011_??_??_??_35_* | xargs -n 1 -- tail -1

Это вызывает команду tail -1 для каждого файла, который передает команду grep (1-й случай) или найден командой ls (2-й случай). Обратите внимание, что это не будет работать, если файл содержит пробелы или перевод строки. Если вам нужен ответ для этого случая, добавьте комментарий.

РЕДАКТИРОВАТЬ Для вашего комментария:

ls -1 2011_??_??_??_35_* | xargs -n 1 -I FILE -- sh -c 'echo ; echo "FILE"; tail -1 "FILE"'

Немного сложнее, но также обрабатывает файлы с пробелами в имени.

Каждый "FILE" в последовательности команд echo ; echo "FILE"; tail -1 "FILE" будет заменен строкой, которая выводит ls . Эта последовательность команд будет передана в оболочку и затем выполнена.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .