Получить список имен файлов и сравнить с файлом csv, добавив 2-й и 3-й столбцы того же 1-го столбца

Простой .tarархив, созданный с помощьюcfv)или без него, не сжат; чтобы получить архив .tar.gzили .tgz, сожмите его:

gzip < my_files.tar > my_files.tgz

Вы можете добавить -9для лучшего сжатия:

gzip -9 < my_files.tar > my_files.tgz

Оба варианта оставят оба архива; вы можете использовать

gzip -9 my_files.tar
вместо этого

, который создаст my_files.tar.gzи удалит my_files.tar(, если все пойдет хорошо ). Затем вы можете переименовать my_files.tar.gzв my_files.tgz, если хотите.

Во многих реализациях tarвы можете извлекать архивы, не указывая параметр z, а tarсам решит, что делать — так что вы можете использовать одну и ту же команду со сжатыми и несжатыми архивами.

1
15.08.2020, 16:40
1 ответ

Предлагаю

for f in dir/*; do awk -F ',' '$1==f{s+=$2+$3}END{print f","s;if(s>400)print f" has exceeded 400"}' f="$(basename "$f")" dir.csv; done

Или в развернутом эквивалентном виде:

for f in dir/*; do 
    awk -F ',' '
        $1==f{s+=$2+$3}
        END{
            print f","s
            if(s>400)print f" has exceeded 400"
        }
    ' f="$(basename "$f")" dir.csv
done

Для каждого файла внутри dir/его базовое имя (, т. е. имя без пути ), передается в awk-скрипт как переменная f.

В скрипте awk в качестве разделителя полей используется запятая с -F ','. Затем, если первое поле dir.csvравно f, сумма 2-го и 3-го полей добавляется к s. Если сумма превышает 400, сообщение включается.

0
18.03.2021, 23:12

Теги

Похожие вопросы