Ваша версия free
имеет правильную идею. По умолчанию он объединяет буферы и кеш в своем отчете. Это потому, что они в основном одно и то же. Они оба запоминают компьютер в ОЗУ (быстрее, чем вторичное хранилище :Диски и SSD ), что он уже видел при чтении Диска и SSD.
Если операционная система считает, что память лучше используется чем-то другим, она может освободить ее. Поэтому не беспокойтесь о буфере и кеше.
Однако просмотр DVD может вызвать увеличение буфера и вытеснение другого содержимого буфера/кэша. Поэтому вы можете использовать nocache для запуска проигрывателя DVD (, если он вызывает проблему).
Попробуйте это,
awk '/^"/{printf "\n";} {printf "%s",$0}' test.csv
"1234", "abcg"
"456899","jklmsd"
"34566","lmno"
/^"/{printf "\n";}
добавит новую строку, если строка начинается с двойных кавычек. {printf "%s",$0}
удалит новую строку в каждой строке. Метод awk
хорошо работает из-за его простоты. Но также можно использовать потоковый редактор sed
для работы с несколькими строками, как указано в этом ответе . Техника может быть полезна и в других ситуациях.
sed -r ':a;N;$!ba;s/\n([^, "]+\"\n)/\1/g' file
Sed имеет краткий синтаксис команды. Что это делает
:a
для создания этикетки, N
добавляет следующую строку, $!ba
, s
для замены текста между/\n(...)/
\n
, находится вне круглых скобок, поэтому опущена. /\1/
просто возвращает то, что было внутри скобок. Шаблон[^, "]
regex
позволяет быстро найти незаполненные поля. Он ищет строки без запятых или пробелов, которые заканчиваются кавычками, и добавляет их к предыдущей строке. В файле могут быть другие несоответствия, которые простой шаблон, подобный этому, не исправит.
Результат:
"1234", "abcg"
"456899","jklmsd"
"34566","lmno"
Следующее позволяет избавиться от всех встроенных новых строк во втором столбце ваших данных CSV, используя csvjson
из csvkit для преобразования данных в JSON, а затем jq
для поиска и замены любых новых строк и чтобы снова переформатировать данные как CSV.
$ csvjson -H file.csv | jq -r '.[] |.b |= gsub("\n"; "") | [.a,.b ] | @csv'
1234," ""abcg"""
456899,"jklmsd"
34566,"lmno"
Причудливый вид " ""abcg"""
связан с тем, что исходные данные имеют встроенные двойные кавычки (они встроены в данные, а не в кавычки поля из-за пробела перед первой двойной кавычкой в поле ).
Параметр -H
для csvjson
сообщает инструменту, что первая строка является не строкой заголовка, а данными. Выражение jq
использует .a
и .b
для двух полей в каждой строке.