rsync зависает на небольших файлах без сообщений об ошибках

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

Затем сценарий перебирает все значения «столбца 1» в первом входном файле, которые являются метками значений. Для каждого столбца скрипт снова берет длину метки значения (, но не менее 8 ), и добавляет эту метку в заголовок. Он также добавляет спецификацию формата с плавающей запятой -в строку fmt.

После того, как сценарий перебрал все метки столбцов, он выводит построенную строку заголовка.

Все вышеперечисленные действия выполняются только для первого файла.

Заключительный шаг в обработке первого файла и единственный шаг в обработке всех файлов после первого состоит в использовании printfдля отображения имени файла и значений «столбца 2» с использованием строка fmt, созданная во время первой итерации цикла. Затем сценарий продолжает обработку следующего файла *.CEL, если таковой имеется.

Этот подход предполагает, что метки столбцов во всех файлах одинаковы и все *.CELимена файлов имеют одинаковую длину.

1
11.08.2021, 00:05
0 ответов

Теги

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