Чтобы отфильтровать строки с разным количеством значений, разделенных запятыми, в 3-м и 4-м полях:
awk '{ nc3=split($3,a,","); nc4=split($4,a,",") } nc3 == nc4' data.in
Функция awk
split
разделит данное поле на регулярное выражение в его третьем аргументе (запятая в данном случае) и сохранит сгенерированные поля в массиве во втором аргументе (a
здесь). Мы не используем результирующий массив, а вместо этого используем тот факт, что split
также возвращает количество сгенерированных элементов массива.
Если эти числа (nc3
и nc4
) совпадают, строка будет напечатана.
Что-то вроде этого?
find . -type d -name data \
\! -exec test -f {}/Archive.zip ';' \
-execdir zip -rj data/Archive.zip data ';'
Это позволит найти каждый каталог data
(первая строка).
\! -exec test -f {}/Archive.zip ';'
отфильтрует любой каталог data
, который не содержит файла с именем Archive.zip
.
Эту строку можно заменить на \! -execdir test -f data/Archive.zip ';'
.
Последний -execdir
будет выполнять данную команду zip
из родительского каталога каталога data
. Это создаст data/Archive.zip
, содержащий файлы в data
(без пути, прикрепленного к архивным именам файлов).
Это похоже на мой ответ на ваш предыдущий вопрос, но со вставленным тестом на существование data/Archive.zip
.