Утилита sync
представляет собой тривиальную обертку вокруг системного вызова sync
.
Вам не нужно звонить прямо перед выключением компьютера... потому что сценарии завершения работы делают это для вас! В большинстве случаев в этом нет необходимости, так как отключение файловой системы или переключение ее на режим только для чтения приводит к сбросу данных этой файловой системы на диск, и сценарии завершения работы делают это. Вызов sync
- это брекет-брекет, в случае, если что-то пойдет не так, и процесс каким-то образом переживет последовательность отключения и предотвратит демонтаж.
sync
также вызывается на этапе ожидания или перехода в спящий режим непосредственно перед выключением аппаратных средств. Здесь нет альтернативы, что-то должно сказать «записать все данные на диск сейчас».
Другое время, когда sync
является полезным, прежде чем делать что-то, что может вызвать аварию, например, опробовать экспериментальный драйвер.
Вызов sync
перед сбоем программы бесполезен. sync
обрабатывает данные в буферах между программами и местом хранения носителями; он не делает ничего для данных, которые программа не сохранила в файле.
Вызов sync
также бесполезен при проверке доступной памяти, поскольку он не влияет на доступную память. Хотя он делает свободные буферы записи для восстановления, он на самом деле не освобождает эти буферы - они будут освобождены, когда ядру нужно выделить память для чего-то другого, а пока они остаются в качестве кэша.
-121--63631-
Вариант 1) Получите кабель cheep hdmi-dvi, они электрически одинаковы (за исключением отсутствия звука на dvi).
Вариант 2) Используйте X11 для отображения окон из raspberry pi (под управлением Raspbrian или других X11 Linux). Используйте ssh -X
для подключения к малиновому Pi.
Вариант 3) Используйте VNC для отображения всего экрана или виртуального экрана.
(Опции 2 и 3 требуют сетевого соединения между машинами)
Вы можете выполнить печать внутри цикла, по одному полю за раз.
awk '{for(i=1;i<=NF;i++) { printf "%-5s",$i } ; printf("\n"); }'
Обратите внимание, что печать новой строки необходима после цикла, чтобы предотвратить слияние нескольких строк в одну.
например
echo a b c 32 87 x5 | awk '{for(i=1;i<=NF;i++) { printf "%-5s",$i } ; printf("\n"); }'
a b c 32 87 x5
Вы могли бы (но я не рекомендую это )создавать несколько переменных по шагам (пример в bash):
$ printf -v l '%s ' {1..30} # list of numbers to use
$ printf -v a '%.0s%%-5s ' $l # make a string of repeated "%-5s"
$ printf -v b ',$%s' $l # make string of field numbers as "$1,$2.."
$ awk -va="$a" '{printf a "\n"'"$b"'}' infile4
Но вы также можете сделать это внутри awk:
$ awk '{split($0,a); for(i in a){printf "%-5s", $i}; print ""}' infile
split
в awk
будет использовать то же регулярное выражение в FS
, которое использовалось для разделения строки на поля и помещения каждого значения в массив a
. for
будет (автоматически )перебирать все поля. printf
распечатает все поля в одном формате. print
поместит новую строку в конец строки. Это более гибко, так как будет работать для любого количества полей, даже для строк с разным количеством полей. И завершен внутри только один язык (легче понять и поддерживать ).
Или даже:
$ awk 'for(i=1;i<=NF;i++){ printf("%-5s",$i) }; print ""}' infile
Вы можете изменить формат на %-5.5s
, чтобы обрезать поля, длина которых превышает 5 символов.
Обратите внимание, что printf awk неправильно считает разложенный символ, например é
, за два символа. Похоже, что кодовые точки Unicode (считаются общей проблемой )вместо кластеров Unicode.
РЕДАКТИРОВАТЬ Отвечая на этот дополнительный вопрос из комментариев:
sum the rows that define column #27 in my table
Просто добавьте нужный код:
$ awk '{split($0,a);
sum=sum+a[27];
for(i in a){ printf "%-5s", $i };
print ""
} END {
print "Sum of column 27 is =", sum }
' infile