Как найти все строки, не соответствующие заданному шаблону

Я не согласен с рекомендациями squashfs. Обычно вы не записываете squashfs на устройство с необработанными блоками; думайте о нем как о легко читаемом tar-архиве. Это означает, что вам все равно понадобится подложка для файловой системы.

ext2 имеет ряд серьезных ограничений, которые ограничивают ее полезность сегодня; поэтому я бы рекомендовал ext4. Поскольку она предназначена для архивирования, вы будете создавать на ней сжатые архивы; это означает, что у вас будет небольшое количество довольно больших файлов, которые редко меняются. Вы можете оптимизировать это:

  • укажите -I 128, чтобы уменьшить размер отдельных inode, что уменьшит размер таблицы inode.
  • Вы можете поиграть с опцией -i, чтобы еще больше уменьшить размер таблицы inode. Если вы увеличите это значение, будет создано меньше inodes, и, следовательно, таблица inode также будет меньше. Однако это означает, что файловая система в среднем тратит больше места на файл. Поэтому это своего рода компромисс.
  • Вы действительно можете отключить журнал с помощью -O ^has_journal. Однако, если вы пойдете этим путем, я рекомендую установить опции по умолчанию для монтирования файловой системы только для чтения; вы можете сделать это в fstab, или вы можете использовать tune2fs -E mount_opts=ro для записи значения по умолчанию в файловой системе (вы не можете сделать это во время mkfs)
  • Вы, конечно, должны сжать ваши данные в архивные файлы, чтобы трата инодов не была такой серьезной проблемой, как могла бы быть. Вы можете создавать образы squashfs, но xz сжимает лучше, поэтому я бы рекомендовал вместо этого файлы tar.xz.
  • Вы также можете уменьшить количество зарезервированных блоков с помощью опции -m в mkfs или tune2fs. Это устанавливает процент (по умолчанию он равен 5), который зарезервирован только для root only. Не устанавливайте его на ноль; файловой системе требуется некоторое пространство для эффективной работы.
-1
16.03.2019, 17:27
1 ответ

Предположим, что ни одно из полей не содержит кавычек:

awk -F, 'NF == 7' file
awk -F, 'NF != 7' file   # show the "bad lines"

Это печатает любую строку ровно с 7 полями, разделенными запятыми -.

Если это правильный CSV-файл (, где поля в кавычках могут содержать разделитель полей ), вам понадобится анализатор CSV. Мне нравится рубин для одного -вкладыша:

ruby -rcsv -pe 'next unless CSV.parse_line($_).length == 7' test.csv
ruby -rcsv -pe 'next if CSV.parse_line($_).length == 7' test.csv  # show the "bad"

Регулярные выражения могут предоставлять элегантные решения, но не здесь, IMO

grep -E '^([^,]+,){6}[^,]+$' test.csv
grep -vE '^([^,]+,){6}[^,]+$' test.csv   # show the "bad" lines
3
28.01.2020, 05:07

Теги

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