Чтобы выполнить обновление до FreeBSD 11.1, запустите от имени пользователя root:
freebsd-update upgrade -r 11.1-RELEASE
или
freebsd-update upgrade -r 11.1
Затем система может показать несколько сообщений об установленном программном обеспечении и запросить
Does this look reasonable (y/n)?
На что вы обычно отвечаете y.
Процедура получения «метаданных» и применения необходимых исправлений.
В конце по показанной инструкции запускаете вручную, опять же как root:
/usr/sbin/freebsd-update install
, а затем обычно отображается сообщение:
Installing updates...
Kernel updates have been installed. Please reboot and run
"/usr/sbin/freebsd-update install" again to finish installing updates.
Затем вы перезагружаетесь, и как только система загрузится, вы входите в систему и снова работаете как пользователь root:
#/usr/sbin/freebsd-update install
src component not installed, skipped
Installing updates... done.
Наконец, чтобы проверить успешность операции:
$uname -r
11.1-RELEASE
После завершения установки вы можете запустить:
pkg update
pkg upgrade
Для установки последних обновлений безопасности.
В вашей задаче много неуказанных параметров, но в качестве отправной точки рассмотрим этот bash
скрипт:
header=
for f in *.CEL
do
if [ -z "$header" ]
then
l=${#f} # length of filename...
fmt="%-${l}s" #... determines width of first column
header="$(printf "$fmt" "")" # first column of first row is blank
for col in $(awk '{print $1}' $f)
do
l=${#col} # width of column
[ $l -lt 8 ] && l=8 # min width of 8
header="$header $(printf "%-${l}s" "$col")" # append column label to header
fmt="$fmt %-$l.6f"
done
printf '%s\n' "$header" # header is first row of output
fi
printf "$fmt\n" "$f" $(awk '{print $2}' $f) # print filename and all column 2 values
done
Запуск скрипта дает:
FQC-10090295 FQC-10119363 FQC-10132112
RIBBY_g_5ZCV995_BI_SNP_D04_38774.CEL 0.007813 0.023438 0.093750
Я скопировал ваш входной файл во второе имя файла и повторно -запустил:
FQC-10090295 FQC-10119363 FQC-10132112
RIBBY_g_5ZCV995_BI_SNP_D04_38774.CEL 0.007813 0.023438 0.093750
RIBBY_g_5ZCV995_BI_SNP_D04_38775.CEL 0.007813 0.023438 0.093750
Этот сценарий сначала работает по всем *.CEL
файлам.
Для первого файла сценарий строит строку заголовка header
, исходя из предположения, что все имена файлов будут иметь одинаковую длину. Пока при построении строки заголовка сценарий также создает строку формата printf
fmt
, которая будет использоваться для отображения столбцовых данных. Первое поле в строке формата — это строка достаточной длины для отображения имени файла.
Затем сценарий перебирает все значения «столбца 1» в первом входном файле, которые являются метками значений. Для каждого столбца скрипт снова берет длину метки значения (, но не менее 8 ), и добавляет эту метку в заголовок. Он также добавляет спецификацию формата с плавающей запятой -в строку fmt
.
После того, как сценарий перебрал все метки столбцов, он выводит построенную строку заголовка.
Все вышеперечисленные действия выполняются только для первого файла.
Заключительный шаг в обработке первого файла и единственный шаг в обработке всех файлов после первого состоит в использовании printf
для отображения имени файла и значений «столбца 2» с использованием строка fmt
, созданная во время первой итерации цикла. Затем сценарий продолжает обработку следующего файла *.CEL
, если таковой имеется.
Этот подход предполагает, что метки столбцов во всех файлах одинаковы и все *.CEL
имена файлов имеют одинаковую длину.
Что-то вроде этого — то, что вам нужно:
$ cat tst.awk
BEGIN { OFS="\t" }
FNR==1 {
row = $1
rows[row]
next
}
{
col = $1
cols[col]
vals[row,col] = $2
}
END {
printf "%s", ""
for (col in cols) {
printf "%s%s", OFS, col
}
print ""
for (row in rows) {
printf "%s", row
for (col in cols) {
printf "%s%s", OFS, vals[row,col]
}
print ""
}
}
но без ввода/вывода, который проясняет ваши требования, и мы можем протестировать против (см. мой комментарий ), это просто непроверенное предположение.