Как я могу объединить 2 строки в одну строку

Ваша версия freeимеет правильную идею. По умолчанию он объединяет буферы и кеш в своем отчете. Это потому, что они в основном одно и то же. Они оба запоминают компьютер в ОЗУ (быстрее, чем вторичное хранилище :Диски и SSD ), что он уже видел при чтении Диска и SSD.

Если операционная система считает, что память лучше используется чем-то другим, она может освободить ее. Поэтому не беспокойтесь о буфере и кеше.

Однако просмотр DVD может вызвать увеличение буфера и вытеснение другого содержимого буфера/кэша. Поэтому вы можете использовать nocache для запуска проигрывателя DVD (, если он вызывает проблему).

0
19.02.2020, 09:36
3 ответа

Попробуйте это,

awk '/^"/{printf "\n";} {printf "%s",$0}' test.csv

"1234", "abcg"
"456899","jklmsd"
"34566","lmno"
  • /^"/{printf "\n";}добавит новую строку, если строка начинается с двойных кавычек.
  • {printf "%s",$0}удалит новую строку в каждой строке.
1
28.04.2021, 23:23

Метод awkхорошо работает из-за его простоты. Но также можно использовать потоковый редактор sedдля работы с несколькими строками, как указано в этом ответе . Техника может быть полезна и в других ситуациях.

sed -r ':a;N;$!ba;s/\n([^, "]+\"\n)/\1/g' file

Sed имеет краткий синтаксис команды. Что это делает

  1. Используйте :aдля создания этикетки,
  2. Команда Nдобавляет следующую строку,
  3. Переход к нашему ярлыку с помощью $!ba,
  4. И sдля замены текста между/\n(...)/
  5. Первая новая строка, \n, находится вне круглых скобок, поэтому опущена.
  6. /\1/просто возвращает то, что было внутри скобок.

Шаблон[^, "]regexпозволяет быстро найти незаполненные поля. Он ищет строки без запятых или пробелов, которые заканчиваются кавычками, и добавляет их к предыдущей строке. В файле могут быть другие несоответствия, которые простой шаблон, подобный этому, не исправит.

Результат:

"1234", "abcg"
"456899","jklmsd"
"34566","lmno"
0
28.04.2021, 23:23

Следующее позволяет избавиться от всех встроенных новых строк во втором столбце ваших данных 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для двух полей в каждой строке.

0
28.04.2021, 23:23

Теги

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