У меня недостаточно репутации, чтобы комментировать, но:
Вся твердотельная память имеет конечный срок службы циклов записи и технически изнашивается через них в конце концов, но, честно говоря, забота об этих двух вещах даст вам полезный срок службы порядка десятилетий, если вы не часто используете другое место для дополнительного хранения. Если это в первую очередь просто чтение ОС для загрузки и случайных обновлений, у вас не должно быть никаких проблем.
awk '/^01/||n%2{print;n+=gsub(/"/,"&")}' file
Для каждой строки
/^01/||n%2
Если строка начинается с 01
илиn
(изначально ноль )нечетный, print
Распечатать n+=gsub(/"/,"&")
увеличить n
на значение, возвращаемое функцией gsub
. /"/
самой собой "&"
. Это действительно было бы бессмысленно, но он также возвращает количество сделанных замен, так что это способ подсчета количества двойных -кавычек в строке. Обратите внимание, что если n
нечетное (n%2
), строка не имеет закрывающей двойной -кавычки, поэтому она продолжает печатать до тех пор, пока n
не станет четным, независимо от того, есть ли совпадение /^01/
на следующие строки.
Боковой -по -боковой дифференциал для вас:
$ diff -yW 30 <(cat file) <(awk '/^01/||n%2{print;n+=gsub(/"/,"&")}' file)
04,xde <
01,abc" 01,abc"
cd cd
as" as"
02,dsad <
03,1ad" <
01,as,"as 01,as,"as
us" us"
02,s <
01,a 01,a
Использование csvgrep
из пакетаcsvkit
для извлечения всех записей со значением codeRegion
, содержащим строку01
:
csvgrep -c codeRegion -m 01 file.csv
Здесь используется правильный синтаксический анализатор CSV, поэтому не будет проблем с символами новой строки или запятыми в полях с правильными кавычками.
Опция -c
выбирает столбец, который мы хотим исследовать, по номеру или имени, а -m
указывает строку для сопоставления. Можно также использовать -r
для сопоставления с регулярным выражением, например. -r '^01$'
, чтобы избежать сопоставления строк, где 01
является подстрокой (, как в011
). См. csvgrep --help
.