Ответ 1
Замените file
на выходе с помощью sprintf("%02d", file)
.
Или даже весь набор с filename = sprintf("%s_%02d.pdb", pdb, file);
.
У меня есть следующая команда 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 по-разному. Помощь будет высоко оценена.
Замените file
на выходе с помощью sprintf("%02d", file)
.
Или даже весь набор с filename = sprintf("%s_%02d.pdb", pdb, file);
.
Здесь, как создать ведущие нули с awk
:
# echo 1 | awk '{ printf("%02d\n", $1) }'
01
# echo 21 | awk '{ printf("%02d\n", $1) }'
21
Замените %02
на общее количество нужных цифр (включая нули).
Вот функция, в которой значения левых или правых колодок с нулями зависят от параметров: 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
Это не полностью проверенное сражение, так что странные параметры могут дать странные результаты.