Как я могу дополнить каждую строку в текстовом файле заданным количеством пробелов с линиями неравной длины?

У меня есть этот текстовый файл, который я пытаюсь разобрать, в нем есть символы, такие как ниже:

abcd  a27382  ESH738 991839
ahsj  dhaksj  GSH736 774828
ahsj  dhaksj  RHA330
ahsj  dhaksj  GSH736 774828

Мой вопрос: как я могу вставить 3 пробела после последнего набора чисел с правой стороны по всем строкам без блокнота, выполняющего возврат каретки, когда я добираюсь до конца последнего номера?

Мне нужно сделать это для более чем 40000 строк, поэтому вручную нажимать клавишу пробела в конце каждой строки, чтобы получить эти 3 дополнительных пробела, не может быть и речи. Также в местах, где нет номера (пример, строка 3), мне все еще нужны эти дополнительные пробелы, чтобы компенсировать пропущенные числа, в этом случае это будет 9 пробелов (6 для несуществующих номеров и 3 для последнего пробелы после). Пожалуйста, дайте мне знать, если вы знаете какой-либо простой способ сделать это, так как это было бы очень полезно, спасибо!

2 ответа

Решение

Используя Notepad++, можно выполнить две замены на основе регулярных выражений, которые будут заполнять все строки пробелами, а затем обрезать все строки до одинаковой длины. Я не проверял производительность этого метода с 40000 строк файла.

Первая замена собирается добавить пробелы справа от текста:

введите описание здесь

На вкладке замены установите "Регулярное выражение" и убедитесь, что "совпадает с новой строкой" и "Обтекание" отключены. Тип ^(.*) что означает сопоставить все на строке в "Найти что" и введите $1 а затем количество пробелов, которые вы хотите добавить (в вашем примере добавьте 9).

После нажатия кнопки "заменить" все строки должны иметь как минимум желаемую длину, а многие будут длиннее, чем вы хотите.

Вторая замена, которая уравновешивает.введите описание здесь

Для второй замены мы собираемся взять две части на линию и выбросить одну.

Сначала убедитесь, что "Заменить на" имеет только $1 в нем и без пробелов после. Затем измените "Найти что" на ^(.{28})(.*) который гласит: найдите в начале строки первые 28 символов (измените на 31, чтобы оставить 3 пробела в качестве отступа) в первой группе, а затем найдите все остальное в строке во второй группе.

Когда это применяется с "Заменить", оно должно обрезать все строки до одинаковой длины.

Примечание: некоторым движкам регулярных выражений может понадобиться $ что означает "конец строки", добавляемый при использовании этой техники.

Это будет зависеть от того, пишете ли вы оригинальный файл или нет. Если вы создаете этот файл, вы можете использовать printf как это

 printf "%s   " "your_string_of_text"

printf имеет много вариантов форматирования, которые вы можете использовать. Но если вы редактируете файл, sed будет служить вам хорошо

 sed 's/^.*$/&\ \ \ /g' some_file > some_other_file

Это добавит 3 пробела в конец каждой строки в some_file и записать вывод в some_other_file, Обратите внимание, что пробелы экранированы, и амперсанд служит для записи первого шаблона на выход.

Другие вопросы по тегам