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

Для командной оболочки есть ли общая программа, подобная column, которая имеет возможность выравнивать определенные или все столбцы вправо, если не обнаруживает также числовые поля и делает это автоматически для них?

В противном случае, что может быть наиболее кратким способом с командами обработки текста?

Пример ввода, разделенного пробелами, уже передан через | column -t:

TVN         20120419  10.08  10.08  9.15   9.6    1630000  9.17    20120419  4.6      83.88   7376600    -0.21858
INTEGERPL   20120419  143.1  148.9  140.3  142.5  2910     138.53  20120405  4.32503  5.55    1642500    1.26158
JSW         20120419  93.55  94.4   91.25  92.7   116000   90.07   20120329  3.86997  8.54    13155770   1.29315
KERNEL      20120419  73.7   74.9   72.9   74.1   56200    71.8    20120404  3.48432  10.71   2819790    1.50892
EUROCASH    20120419  39.49  41.99  39.01  40.73  812000   38.05   20120328  4.85095  20.21   5280548    2.46091
PEKAO       20120419  145.9  147.8  144.0  145.5  292000   140.2   20120404  3.70615  5.48    68858748   2.63889
PKNORLEN    20120419  38.0   38.5   37.25  37.35  1230000  36.26   20120329  4.15476  21.21   104607200  2.65772

Обратите внимание на проблемы с читаемостью esp. где различия между записями на несколько величин (как 2-й последний столбец). Между прочим, форматирование цен, чтобы всегда показывать N десятичных знаков, является проблемой само по себе. Но для этого я использовал awk OFMT="%.4f".

4
задан 20 April 2012 в 00: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 настраиваемых параметра скрипт:

  • ширина: поле по умолчанию с (используется для выравнивания)
  • разделитель: используется для разделения выходных столбцов
0
ответ дан 20 April 2012 в 00:14

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

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