Форматування тексту в стовпці


11

У мене є файл з двома стовпцями, як показано нижче (приклад):

ФАЙЛ 1:

John 1
Peter 2
Michael Rod 3
Su 7
Louise 9

Мені потрібно відформатувати це, і очікуваний результат повинен бути:

ФАЙЛ 1:

John        1
Peter       2
Michael Rod 3
Su          7
Louise      9

1
де 2 колонки?
Марк

Обидва виходи, схоже, однакові. Скажіть, будь ласка, більше детальних запитань?

2
Як визначаються стовпці? Чи існує вкладка чи якийсь інший символ між назвою та номером? Як ми можемо знати, що Michael Rod 3це 2 стовпці, а не 3?
тердон

2
Ні, не публікуйте зображення тексту . Я просто збирався скопіювати і вставити цей текст, щоб я міг вам допомогти, а тепер не можу.
Kusalananda

1
давно, що сказали mmmint та terdon; Ви можете, наприклад, вказати, що це останній стовпець, який потрібно відступити, щоб забезпечити ширину найдовшого рядка?
Jeff Schaller

Відповіді:


18

Якби вхід складав лише два стовпці, я б запропонував використовувати column -t. Тут це не зовсім працює, хоча columnутиліта буде розглядати будь-яку кількість пробілів чи вкладок як роздільники стовпців:

$ column -t file1
John     1      
Peter    2      
Michael  Rod  3 
Su       7      
Louise   9      

"Michael Rod" - це два стовпці, так що в одному рядку є один стовпець більше, ніж інші рядки, що змішує результат.

Ми можемо обійти це, вставивши символ перед вкладкою до останнього стовпця, а потім дозволити columnвикористовувати (лише) це як роздільник:

$ awk '{ $NF = "\t" $NF; print }' file1 | column -t -s $'\t'
John          1
Peter         2
Michael Rod   3
Su            7
Louise        9

У Awk NF- це кількість полів (стовпців) і $NFє даними в останньому полі. Сценарій, який я використовую, просто модифікує дані останнього поля, попередньо передбачивши символ вкладки, перед тим, як надрукувати повний рядок.

Якщо ваша оболонка не розуміє $'\t', ви можете вибрати іншого символу, який не є частиною даних:

awk '{ $NF = "@" $NF; print }' file1 | column -t -s '@'
John          1
Peter         2
Michael Rod   3
Su            7
Louise        9
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.