В вашей задаче много неуказанных параметров, но в качестве отправной точки рассмотрим этот 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
имена файлов имеют одинаковую длину.