выравнивать столбцы вправо

Если вы используете Unity, откройте тире и выполните поиск «отображает». Это окно настроек, позволяющее выбрать разрешение вашего монитора (ов) и некоторых других параметров.

3
задан 20 April 2012 в 01:14

2 ответа

Выравнивание и определение числового поля могут быть достигнуты с помощью следующей простой программы awk.

{
    width=10;
    separator="|";

    for (i=1; i<=NF; i++) {
        if (match($i, /[-+]*[0-9]+[\.]*[0-9]*/)) {
            printf("%"width"s", $i);
        }
        else { 
            printf("%-"width"s", $i);
        }
        if (i == NF) printf("\n");
        else printf("%s", separator);
    }
}

Сохраните ее как column.awk.

Чтобы проверить, как она работает, попробуйте следующее:

echo "abc -1.2 def 2 3 hij" | awk -f column.awk

Выход:

abc       |      -1.2|def       |         2|         3|hij

В скрипте .awk есть 2 настраиваемых параметра:

Ширина : поле по умолчанию с разделителем (используется для выравнивания): используется для разделения выходных столбцов
3
ответ дан 25 May 2018 в 12:33
  • 1
    Спасибо, я мог бы использовать, что, хотя я надеялся избежать целого отдельного сценария, где я обычно просто прибегнуть к Руби тогда :) Только в моем экземпляре я добавлю притон линию #!/usr/bin/awk и [F2] его – Marcos 20 April 2012 в 01:28
  • 2
    Он не устанавливает минимальную ширину для каждого столбца. Но потом я вижу, что вы упомянули об этом, используя фиксированную ширину. Это хороший код, который можно расширить. Проблема выравнивания, вероятно, входит в число самых старых классических задач в истории Unix, поэтому я должен быть в состоянии найти различные подходы, готовые к работе. – Marcos 20 April 2012 в 01:44
  • 3
    Вы правы, это просто прототип для расширения (или просто доказательство концепции). Определение ширины столбца без какой-либо предшествующей информации может быть сложным (наихудший сценарий будет состоять в том, чтобы читать весь файл до вывода чего-либо, что противоречит философии фильтрации строк). Ваше решение #! замечательно, если честно, мой сценарий изначально был «разработан» как однострочный ... – lgarzo 20 April 2012 в 12:42
  • 4
    bash printf является альтернативой – Riga 10 October 2014 в 16:05

printf awk должен это сделать. Для получения дополнительной информации вы должны предоставить дополнительную информацию о входном и (желаемом) выходном формате.

0
ответ дан 25 May 2018 в 12:33
  • 1
    Спасибо, я добавил образец, какие-либо предложения о том, как обрабатывать общий ввод? (не зная заранее планировку поля) – Marcos 20 April 2012 в 01:24

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

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