Traitement des fichiers
Résolu
7amdolah
Messages postés
19
Statut
Membre
-
7amdolah Messages postés 19 Statut Membre -
7amdolah Messages postés 19 Statut Membre -
Bonjour,
Je suis en train de faire un script shell, j'aimerais faire quelque chose si quelqu'un pouvait m'aider.
J'ai un fichier csv et je veux récupérer que les lignes qui respectent mon critère de filtre (ou de supprimer les lignes qui ne respectent pas mon critère de filtre).
Voici un extraire de mon fichier csv.
Critère de filtre : date_csv doit être entre date_début et date_fin.
date_csv : commence à partir de la position 34 jusqu'à la position 42 sous forme AAAAMMJJ.
date_début : sous forme AAAAMMJJ.
date_fin : sous forme AAAAMMJJ.
J'ai développé un scripte mais la commande cat transforme les lignes résultat :
mon scripte:
Je suis en train de faire un script shell, j'aimerais faire quelque chose si quelqu'un pouvait m'aider.
J'ai un fichier csv et je veux récupérer que les lignes qui respectent mon critère de filtre (ou de supprimer les lignes qui ne respectent pas mon critère de filtre).
Voici un extraire de mon fichier csv.
AZERTYUIOPQSDF 02 20110921014732000000000111111111111111 4444444444444 AAAAAAA AAAAAAA
QSDFGHJ 03 20110923014553741244444444444444444444 1111111111111 ZZZZZZZ
AAAAAAA 06 20110921014524000000000000000000000000 000000000 ZZZZZZZ
Critère de filtre : date_csv doit être entre date_début et date_fin.
date_csv : commence à partir de la position 34 jusqu'à la position 42 sous forme AAAAMMJJ.
date_début : sous forme AAAAMMJJ.
date_fin : sous forme AAAAMMJJ.
J'ai développé un scripte mais la commande cat transforme les lignes résultat :
AZERTYUIOPQSDF 02 20110921014732000000000111111111111111 4444444444444 AAAAAAA AAAAAAA AAAAAAA 06 20110921014524000000000000000000000000 000000000 ZZZZZZZ
mon scripte:
#!/bin/ksh
rep_f="echantillon_fichier"
rep_f_R="echantillon_fichier_R"
date_d=20110921
date_f=20110921
echo "1"
ls $rep_f | while read nom_f
do
echo "2"
nb_ligne=0
cat -v $rep_f/$nom_f | while read ligne_f
do
echo "3"
date_l='echo $ligne_f | awk -F" " '{print $3}'|cut -c1-8'
if [ $date_d -ge $date_l ] && [ $date_l -ge $date_f ]
then
echo $ligne_f>>"${rep_f_R}/${nom_f}.temp"
nb_ligne='expr $nb_ligne + 1 '
fi
done
if [ $nb_ligne != 0 ]
then
echo "nb: ${nb_ligne}">>"${rep_f_R}/${nom_f}.temp"
fi
done
2 réponses
-
salut,
ls et cat sont des commandes inutiles dans un script shell (en général).
Ce n'est pas cat qui transforme les lignes, c'est l'absence de guillemets.
awk | cut
aussi est inutile. Fais tout de suitecut -c 34-42
pour ne pas utiliser ls :for f in chemin/*; do echo "$f"; done
Note l'emploi des guillemets.
pour ne pas utliser cat:while read line; do echo "line"; done < chemin/fichier
-
Salut,
Le script est imposé ? C'est un devoir ?
Les dates de début et fin sont les mêmes. Ça sera toujours le cas ou elles sont susceptibles d'être différentes ?