Как найти диапазон чисел в содержимом файла и переместить файлы, содержащие диапазон чисел, в другой каталог?

Хорошо, поэтому у меня около 90 файлов, каждый с телом вроде

187942 78.9 

Я хочу фильтровать файлы со значениями от 70 до 90 во втором столбце и переместить их в другой каталог.

Извините, если это тривиальный вопрос. Я очень новичок в Linux.

  • Удалить последнюю строку gz-файла
  • Подсчет файлов в листах дерева каталогов
  • perl + uniq перед переменной
  • file (1) завершение команды при использовании опции -f -
  • Печать строки с заданным смещением в файле
  • Удаление X процентов данных файла? (частичное аннулирование файла)
  • Какая программа использует какой пакет?
  • Команда перечислить в режиме реального времени все действия процесса
  • 2 Solutions collect form web for “Как найти диапазон чисел в содержимом файла и переместить файлы, содержащие диапазон чисел, в другой каталог?”

    Вы можете использовать небольшой скрипт с awk чтобы отличать хорошие / плохие файлы. Например, что-то вроде следующего:

     #!/bin/bash mkdir -p another-directory for f in * ; do if ! awk '$2>=70 && $2<=90 { exit 1; }' "$f" ; then mv -- "$f" another-directory/ fi done 

    Ключ здесь состоит в том, что exit 1 является exit 1 с ошибкой, поэтому фраза условия с awk просто обнаруживает наличие строки, где второй токен представляет собой число от 70 до 90 (включительно). В противном случае awk завершается нормально, с успехом. Восклицательный знак отрицает это, делая условие истинным, когда файл имеет хорошую строку, а false – в противном случае.

    Использование awk :

     awk '$2>70&&$2<90&&!a[FILENAME]++{printf("%s%c",FILENAME,0)}' * | xargs -0 cp -vt target/ -- 

    Объяснение:

    • $2>70&&$2<90 условие.
    • !a[FILENAME]++ будет истинным, если имя файла уникально (имя файла будет напечатано только один раз).
    • printf("%s%c",FILENAME,0) печатает имя файла с нулевым байтовым разделителем, чтобы справиться со специальными именами файлов.
    • xargs -0 считывает нулевые байты имен файлов.
    • cp -vt target/ -- копирует файлы в target/ каталог target/ .
    Linux и Unix - лучшая ОС в мире.