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

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

187942 78.9 

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

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

  • Добавьте строки в начало и конец огромного файла
  • На лету сжатие читаемой и записываемой папки (например, Windows EFS)?
  • Как я могу использовать переименование для рекурсивного переименования в верхний регистр
  • как выводить текст на экран и файл внутри сценария оболочки?
  • Linux не видит файл до тех пор, пока я не перейду в этот каталог
  • Как проверить, какие файлы записаны приложением?
  • Определение, является ли файл жесткой ссылкой или символической ссылкой?
  • Приоритет пользователя и владельца группы в разрешении файлов
  • 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/ .
    Interesting Posts

    Переключение <esc> и <caps lock> таким образом, который сохраняется с помощью внешних клавиатур

    как заставить aspell игнорировать слова верхнего регистра (акронимы)?

    с помощью git для управления версиями любого файла, отредактированного с помощью текстового редактора

    Как установить пользовательский размер по умолчанию для новых окон терминала XFCE?

    Команда ffmpeg не работает на ec2

    Не могу заставить Systemd работать на GENTOO: Где я иду не так?

    Может ли VirtualBox вернуть IP-адрес для запущенной виртуальной машины?

    Связь с SRF02 Датчик переключения на Linu

    picocom: список всех подключенных портов

    Не удается загрузить Debian с USB-устройства

    Как искать текст в сжатых файлах и получать только имя файла

    Ubuntu 10.04 bad install … теперь Mac не загружается

    Как прервать / отменить запущенную команду в initramfs?

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

    Как получить непревзойденные строки в vimdiff

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