У меня есть файл, строки которого должны быть
U:<text>\tD:<text>\tA:<text>\n
где ‹ text > — текст без символов табуляции или новой строки. \t — это табуляция, а \n — символ новой строки. К сожалению, некоторые поля ‹ text > содержат символ новой строки, поэтому структура нарушается. Например вот так:
U:uuu D:ddd A:aaa
U:uuu D:ddd A:aaa
U:uu
u D:ddd A:aaa
U:uuu D:ddd A:aaa
Здесь был символ новой строки в поле U в 3-й строке, из-за чего часть содержимого, которое должно быть в 3-й строке, теперь находится в 4-й. Как я могу исправить структуру с помощью таких инструментов, как sed или tr? Я хочу удалить те символы новой строки, которых нет в конце моей записи.
Так, например, указанный выше фиксированный файл должен выглядеть так:
U:uuu D:ddd A:aaa
U:uuu D:ddd A:aaa
U:uuu D:ddd A:aaa
U:uuu D:ddd A:aaa
Другим важным аспектом решения является скорость, так как мне нужно исправить гигабайты файлов.
A:
содержать ошибочный перевод строки? Может ли какой-либо из разделов<text>
содержатьA:
,U:
илиD:
? Насколько велик файл для обработки? Можно ли загрузить весь файл в память (скажем, файлы размером менее 1 ГБ) или это нужно делать более поэтапно? Всегда ли будут ведущие пробелы в строках «продолжения»? - person Jonathan Leffler   schedule 19.08.2014