, если вы на самом деле синхронизируетесь на сервер на один сервер, это Счастливо распечатайте это:
anthony@Watt:~$ ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
-xen1.rack911.co 66.228.59.187 3 u 737 1024 377 81.085 -2.838 1.015
+clock.xmission. .GPS. 1 u 512 1024 377 76.454 -6.912 10.883
+time-c.nist.gov .ACTS. 1 u 169 1024 377 9.470 1.294 29.911
*clock1.alb1.ino .CDMA. 1 u 980 1024 377 29.739 -4.838 11.728
Обязательно перезагрузите NTP после модификации его файла конфигурации. Я даже не вижу Level1e.cs.unc.edu
в вашем выходе. (BTW: список серверов выше с использованием бассейна NTP, это не настроено вручную.)
Я написал этот ответ до того, как заметил, что вы хотите использовать команду столбца
, но если это не является обязательным требованием, вы можете отцентрировать текст с помощью этого скрипта оболочки bash
:
#!/bin/bash
set -e # exit the script if something goes wrong
width=12
data="temperatures 50 12 89 63"
for word in $data; do
strlen=$(printf $word | wc -c)
w=$(( ($width - $strlen)/2 ))
printf "%${w}s%s\n" "" $word
done
Как это работает:
$width
- это ширина колонки для
печатает каждое слово в $data
$strlen
- это длина текущего слова, в байтах. $w
- это количество пробелов, которое необходимо напечатать перед словом, чтобы сделать его центрированным. printintf
печатает $w
пробелы, за которыми следует слово Output:
temperatures
50
12
89
63
Этот скрипт будет работать только для однобайтовых текстовых кодировок. Например, для обработки текста, содержащего
Учитывая некоторый файл,
temps,temperatures,heatness
500,50,50
1212,12,12
899,89,8989
63,6363,63
команда column
могла дать вам выровненные столбцы, но никакую другую специальную настройку для них:
$ column -t -s, file
temps temperatures heatness
500 50 50
1212 12 12
899 89 8989
63 6363 63
С помощью небольшого -небольшого awk
скрипта мы можем выполнить центрирование:
$ awk -F, -f center-cols.awk file
temps temperatures heatness
500 50 50
1212 12 12
899 89 8989
63 6363 63
$ awk -F, -v OFS='|' -f center-cols.awk file
temps|temperatures|heatness
500 | 50 | 50
1212 | 12 | 12
899 | 89 | 8989
63 | 6363 | 63
Скрипт center-cols.awk
может выглядеть как
function center(w, string, space, before, after) {
space = w - length(string) # number of spaces in total to fill
before = int(space/2) # spaces before string
after = space - before # the rest of spaces after
return sprintf("%*s%s%*s", before, "", string, after, "")
}
FNR == 1 {
for (i = 1; i <= NF; ++i)
width[i] = length($i)
}
{
for (i = 1; i <= NF; ++i)
$i = center(width[i], $i)
print
}
Сценарий центрирует каждый столбец в данных в соответствии с шириной столбца заголовка (первой строки )каждой строки. Это означает, что строки с данными, которые длиннее заголовка, все равно будут смещены. Это ограничение упрощает реализацию сценария (. В противном случае файл пришлось бы анализировать дважды: один раз, чтобы найти максимальную ширину столбца для каждого столбца, и один раз, чтобы переформатировать данные ).
Сначала скрипт получает ширину каждого столбца заголовков и сохраняет их в массив width
. Затем он перезаписывает каждый столбец с помощью функции center
.
Функция center
принимает ширину и строку и возвращает строку с центром в пределах этой ширины, с боковыми пробелами, заполняющими неиспользуемое пространство. Результирующая строка строится с использованием sprintf()
, в котором фланкирующие пробелы записываются с использованием спецификатора формата %*s
. Этот спецификатор принимает ширину и строку, и мы даем ему рассчитанную ширину и пустую строку как для пробела в начале, так и для конца фактических данных (пустая строка будет отформатирована до заданной ширины ).
После переформатирования всех столбцов строки строка печатается.
Проанализировав файл дважды, мы можем найти максимальную ширину каждого столбца.Таким образом, нам не нужно полагаться на строку заголовка, определяющую ширину столбцов :
.function center(w, string, space, before, after) {
space = w - length(string) # number of spaces in total to fill
before = int(space/2) # spaces before string
after = space - before # the rest of spaces after
return sprintf("%*s%s%*s", before, "", string, after, "")
}
NR == 1 {
for (i = 1; i <= NF; ++i)
width[i] = length($i)
next
}
FNR == NR {
for (i = 1; i <= NF; ++i)
if (width[i] < length($i))
width[i] = length($i)
next
}
{
for (i = 1; i <= NF; ++i)
$i = center(width[i], $i)
print
}
Выполнение этого в файле с короткими заголовками столбцов:
$ awk -F, -v OFS='|' -f center-cols.awk file file
t | a | b
500 | 50 | 50
1212| 12 | 12
899 | 89 |8989
63 |6363| 63
Обратите внимание, что нам нужно дважды указать имя файла в командной строке.