Как распечатать вывод текстового файла в формате таблицы со строковыми столбцами

Гуманно интерпретированный ответ:

Is there a way to convert ExFAT to UDF [in-place]?

Нет. Обычно процесс преобразования одной файловой системы в совершенно другую файловую систему является рискованным и обременительным, и инструменты для этого создаются только в исключительных обстоятельствах, когда разработчики пытаются автоматически убедить людей перейти на новую файловую систему (думаю, ext *-> BTRFS или Microsoft FAT32 -> NTFS ).

Педантичный ответ на точное оригинальное название:

Is there a way to convert ExFAT to UDF?

Да:

  • Создайте новую файловую систему в другом месте и скопируйте в нее файлы
  • Заархивируйте все файлы, сохраните tar во временной файловой системе в другом месте, уничтожьте старую файловую систему, создайте новую файловую систему на ее месте и распакуйте в нее файлы.

Очевидно, что все, что связано с удалением данных, вы делаете на свой страх и риск, убедитесь, что у вас есть работающие резервные копии и т. д.

1
04.12.2020, 10:46
1 ответ

Следующий подход с двойным -проходом должен форматировать поля до фиксированной ширины столбца:

awk -F':\\|' -v OFS='|' 'NR==FNR{for (i=1;i<=NF;i++) {if (length($i)>max[i]) max[i]=length($i);} next;}
           {for (i=1;i<=NF;i++) $i=sprintf("%-*s",max[i],$i)}1' output.txt output.txt

Это обработаетoutput.txtдважды (, поэтому вы должны указать его дважды в качестве аргумента дляawk).

  • В первом проходе (, где FNR, счетчик -строки файла -, равен NR, общему счетчику строк ), мы просто ищем максимальную длину каждую запись поля (, перебирая все поля от $1до$NF)и сохраняя их в массиве max.
  • Во втором проходе мы (повторно -)форматируем поля с помощью sprintfдо фиксированной ширины, определенной из массива maxмаксимальной ширины полей.
  • Разделитель полей для ввода будет приниматься как комбинированная :|последовательность символов (с надлежащим экранированием, поскольку многосимвольные -символьные разделители входных полей обрабатываются как регулярные выражения, а |имеет там особое значение ). Разделитель выходных полей будет установлен в один |.

Результат для вашего примера

2020.11.07-22.3.31 INFO - |FSNAME|AVAILABLE|AVAILABILITY
2020.11.07-22.3.31 INFO - |/opt  |yes      |1.4GB       
2020.11.07-22.3.31 INFO - |/data |yes      |30GB        
2
18.03.2021, 22:45

Теги

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