web-dev-qa-db-fra.com

Ajouter des zéros à la variable awk

J'ai la commande awk suivante dans une boucle "for" de bash:

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

Cela lit une série de fichiers avec le nom $ pdb.pdb et les divise en fichiers appelés $ pdb_1.pdb, $ pdb_2.pdb, ..., $ pdb_21.pdb, etc. comme $ pdb_01.pdb, $ pdb_02.pdb, ..., $ pdb_21.pdb, c'est-à-dire pour ajouter des zéros de remplissage à la variable "fichier". 

J'ai essayé sans succès d'utiliser printf de différentes manières. L'aide serait très appréciée.

16
mirix

Remplacez file à la sortie par sprintf("%02d", file).

Ou même toute la mission avec filename = sprintf("%s_%02d.pdb", pdb, file);.

25
glglgl

Voici comment créer des zéros non significatifs avec awk:

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

Remplacez %02 par le nombre total de chiffres dont vous avez besoin (y compris les zéros).

23
JJ.

Voici une fonction qui remplit les valeurs gauche ou droite avec des zéros en fonction des paramètres: 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)
}

Quelques tests:

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

Le test:

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

Ce n'est pas complètement testé sur le champ de bataille, donc des paramètres étranges peuvent donner des résultats étranges.

0
James Brown