J'ai un fichier de 3 champs:
123710337783,351898014413150,123028040249634
123710337785,352934028758390,123028040109275
Je dois vérifier que les champs correspondent aux longueurs suivantes:
Field 1 = 12
Field 2 = 15 or 16
Field 3 = 15
Je reçois une erreur lors de l'exécution de ceci:
awk -F, '{if(length($2) == 15 ) || length($2) == 16) && length($1) == 12 && length($3)) == 15) print }'
Veuillez aider.
Bernie
Tous vos supports ne correspondent pas. Une expression `` si '' doit être contenue entre crochets, c'est-à-dire,
if (X == 45) ...
if ((X == 45) || (Y == 23)) ...
vous ne l'avez pas, et vous avez plus de parenthèses fermantes que de parenthèses ouvrantes - ainsi l'équilibre est également éteint; si nous comptons les parenthèses (incrémenter pour ouvrir, décrémenter pour fermer), nous nous retrouvons avec un total de -3 au lieu de 0, fermant ainsi trois parenthèses de plus que nous avons ouvert:
1 2 1 0 1 0 -1 0 -1 0 -1 -2 -3
awk -F, '{if(length($2) == 15 ) || length($2) == 16) && length($1) == 12 && length($3) ) == 15) print }'
Alors, essayez plutôt cela qui rééquilibre tout:
awk -F, '{ if (((length($2) == 15 ) || length($2) == 16) && (length($1) == 12 && length($3) == 15)) print }'
Si tout ce que vous allez faire est d'imprimer, mettez votre expression comme condition par défaut:
awk -F, 'length($1)==12 && (length($2)==15 || length($2)==16) && length($3)==15'
Si vous essayez de filtrer les lignes de votre fichier d'entrée qui ne répondent pas à ces critères:
awk -F, '
length($1)!=12 || length($2)<15 || length($2)>16 || length($3)!=15) {next}
# do other stuff...
'
Vous avez des parenthèses asymétriques/déséquilibrées au conditionnel. Essayer:
{ if ((length($2) == 15 || length($2) == 16) && length($1) == 12 && length($3) == 15) print; }