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
A voir également:
- Traitement des fichiers
- Reconsidérer le traitement de vos informations à des fins publicitaires - Accueil - Réseaux sociaux
- Renommer des fichiers en masse - Guide
- Fichiers epub - Guide
- Traitement de texte gratuit - Guide
- Ce logiciel gratuit et léger est parfait pour remplacer Word, même sur un vieux PC - Guide
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.
pour ne pas utiliser ls :
pour ne pas utliser cat:
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 | cutaussi est inutile. Fais tout de suite
cut -c 34-42
pour ne pas utiliser ls :
for f in chemin/*; do echo "$f"; doneNote l'emploi des guillemets.
pour ne pas utliser cat:
while read line; do echo "line"; done < chemin/fichier
Après plusieurs test j'ai constaté que les espace blanche au début et à la fin ils ont été supprimé
vider l'IFS pour readou utiliser REPLY
vider l'IFS pour read
while IFS='' read line...