Обновлено Ответ
Хотя мой первоначальный ответ ниже функционален (@glennjackman) предложение Гленна в комментариях гораздо более кратким, идиоматических, красноречив и предпочтительнее - следующим образом:
#!/bin/bash
mkdir subdir
for f in file*; do
awk -F, 'NF>100{exit 1}' "$f" || mv "$f" subdir
done
Он в основном полагается на статус выхода, который обычно равен 0
, а затем устанавливает только 1
при столкновении файлов, требующих перемещения.
Оригинал ответа
Это скажет вам, если файл имеет более 100 запятые на любой линии:
awk -F, 'NF>100{print 1;exit} END{print 0}' someFile
Он будет печатать 1
и выйти без разбора оставшейся части, если файл файл имеет любую строку с более чем 100 и печатает 0
в конце, если это не так.
Если вы хотите, чтобы переместить их, а также использовать
#!/bin/bash
mkdir subdir
for f in file*; do
if [[ $(awk -F, 'NF>100{print 1;exit}END{print 0}' "$f") != "0" ]]; then
echo mv "$f" subdir
fi
done
Попробуйте это и посмотреть, если он выбирает правильные файлы, и, если вам это нравится, удалить слово echo
и запустить его снова, так что на самом деле перемещает их. Резервное копирование сначала!
Могу ли я переместить этот файл вместо печати 1 –
Я бы предложил использовать значение вывода команд печати. Затем: 'awk 'NF> 100 {exit 1}'" $ f "|| mv ... ' –
@glennjackman Отличное предложение, спасибо. Я работал в ответ. –