Добавить ведущие нули в переменную awk

У меня есть следующая команда awk в цикле "for" в bash:

awk -v pdb="$pdb" 'BEGIN {file = 1; filename = pdb"_" file ".pdb"}
 /ENDMDL/ {getline; file ++; filename = pdb"_" file ".pdb"}
 {print $0 > filename}' < ${pdb}.pdb 

Это читает серию файлов с именем $pdb.pdb и разбивает их в файлах с именем $pdb_1.pdb, $pdb_2.pdb,..., $pdb_21.pdb и т.д. Однако я хотел бы создать файлы с именами, такими как $pdb_01.pdb, $pdb_02.pdb,..., $pdb_21.pdb, то есть для добавления нулей нумерации в переменную "файл".

Я попытался без успеха использовать printf по-разному. Помощь будет высоко оценена.

Ответы

Ответ 1

Замените file на выходе с помощью sprintf("%02d", file).

Или даже весь набор с filename = sprintf("%s_%02d.pdb", pdb, file);.

Ответ 2

Здесь, как создать ведущие нули с awk:

# echo 1 | awk '{ printf("%02d\n", $1) }'
01
# echo 21 | awk '{ printf("%02d\n", $1) }'
21

Замените %02 на общее количество нужных цифр (включая нули).

Ответ 3

Вот функция, в которой значения левых или правых колодок с нулями зависят от параметров: zeropad (value, count, direction)

function zeropad(s,c,d) {
    if(d!="r")             
        d="l"                # l is the default and fallback value
    return sprintf("%" (d=="l"? "0" c:"") "d" (d=="r"?"%0" c-length(s) "d":""), s,"")
}
{                            # test main
    print zeropad($1,$2,$3)
}

Некоторые тесты:

$ cat test
2 3 l
2 4 r
2 5
a 6 r

Тест:

$ awk -f program.awk test
002
2000
00002
000000

Это не полностью проверенное сражение, так что странные параметры могут дать странные результаты.