2015-06-20 5 views
2

У меня есть 100 файлов в определенном каталоге, который содержит несколько записей с полями, разделенными запятыми.Linux: перемещение файлов, содержащих более 100 запятых в одной строке

Мне нужно использовать команду Linux, которая проверяет строки в каждом файле , и если строка содержит более 100 запятых, переместите их в другой каталог.

Возможно ли это?

ответ

4

Обновлено Ответ

Хотя мой первоначальный ответ ниже функционален (@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 и запустить его снова, так что на самом деле перемещает их. Резервное копирование сначала!

+0

Могу ли я переместить этот файл вместо печати 1 –

+1

Я бы предложил использовать значение вывода команд печати. Затем: 'awk 'NF> 100 {exit 1}'" $ f "|| mv ... ' –

+1

@glennjackman Отличное предложение, спасибо. Я работал в ответ. –

Смежные вопросы