Commande awk-fichier vide

Résolu/Fermé
rico34 Messages postés 9 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 30 octobre 2007 - 30 oct. 2007 à 12:18
 rico34 - 2 nov. 2007 à 15:47
Bonjour,

Les fichiers possèdent 6 champs séparés par le séparateur ";". Le 1e champ contient un numéro de ligne de 1 à n (nombre d'enregistrements). Je suis dans une boucle avec une variable i recevant le nom du fichier
for i in a b c
...

Est-il possible avec la commande awk de savoir :
- si le fichier est vide
- si le nombre de champs est correct
- si le 1e champ recoit bien un numero incrementé (1,2,3,...)
Si ce n'est pas le cas, il y a message d'erreur.

Merci
A voir également:

5 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
30 oct. 2007 à 13:40
Salut,

Est-il possible avec la commande awk de savoir :
- si le fichier est vide

Oui.
awk 'END { if(NR == 0) {print "Fichier vide" }}' fichier

- si le nombre de champs est correct
Oui.
awk -F";" '{ if (NF == 6) {print "Ligne "NR" nombre de champs correct" }}' fichier

- si le 1e champ recoit bien un numero incrementé (1,2,3,...)
Je suis pas sûr d'avoir tout compris là. Si le numéro du 1er champ correspond au numéro de ligne ? Si oui, essaie ça :
awk -F";" ' $1 != NR { print "Ligne "NR" pas OK" }' fichier
;-))
1
Bonjour,
Merci pour tes infos. C'est bien tous les controles demandés. Est il possible de les effectuer dans un seul awk.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
30 oct. 2007 à 19:16
#! /bin/awk -f

BEGIN {
FS=";"
}
$1 != NR {
print "Ligne "NR" pas OK"
}
{
if (NF == 6) {
print "Ligne "NR" nombre de champs correct"
}
}
END {
if(NR == 0) {
print "Fichier vide"
}
}
;-))
0
Ok pour le shell,
Mais le bloc end ne se traite qu'une fois. Quand il y a plusieurs fichiers vides, il n'y a qu'une impression
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour,
Autant pour moi, Le programme fonctionne correctement.

Merci beaucoup.
0