Удалить CR из текстового файла, если последующая строка короче X символов - PullRequest
0 голосов
/ 24 октября 2018

У меня большой текстовый / CSV-файл размером 6 ГБ.Когда он был создан, произошла ошибка, и некоторые символы новой строки (CRLF) не были удалены из полей, поэтому некоторые строки разбиты

Вот упрощенная версия:

например,

Field1<TAB>Field2<TAB>Field3<TAB>Field4
Field1<TAB>Field2<TAB>Field3<TAB>Field4
Field1<TAB>Field2<TAB>Field3
<TAB>Field4
Field1<TAB>Field2<TAB>Field3<TAB>Field4

Таким образом, поле 3 в строке 3 имеет CR, и поэтому строка разбита

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

Легко определить ломаные линии.Они длиной менее 50 символов.Все хорошие строки длиннее 50 символов

Так что мне нужен шаг, который: * определяет короткие строки * удаляет CRLF перед этой строкой * делает это для всего файла

я могу создатьмакрос в UltraEdit и найдите Perl Regex

^.{0,50}$ 

и замените CRLF впереди.Это работает, но занимает слишком много времени.Макросы в UltraEdit удобны, но очень медленны.

Есть ли другой способ?Могу ли я использовать регулярные выражения с каким-либо инструментом для поиска / замены?

Спасибо, Вольфганг

1 Ответ

0 голосов
/ 24 октября 2018

Вы можете искать:

^(.{1,50})\n(.{1,50}\n)

и заменять на:

$1$2

Демонстрация (вместо прерывистых строк по 30 символов или менее): https://regex101.com/r/pr5JhW/1

...