Traitement des fichiers

Résolu/Fermé
7amdolah Messages postés 17 Date d'inscription mercredi 2 janvier 2008 Statut Membre Dernière intervention 13 août 2014 - 13 mars 2013 à 13:58
7amdolah Messages postés 17 Date d'inscription mercredi 2 janvier 2008 Statut Membre Dernière intervention 13 août 2014 - 13 mars 2013 à 19:00
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.
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

Utilisateur anonyme
13 mars 2013 à 15:53
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 suite
cut -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
2
7amdolah Messages postés 17 Date d'inscription mercredi 2 janvier 2008 Statut Membre Dernière intervention 13 août 2014
13 mars 2013 à 16:22
Merci infiniment pour votre réponse
0
7amdolah Messages postés 17 Date d'inscription mercredi 2 janvier 2008 Statut Membre Dernière intervention 13 août 2014
13 mars 2013 à 18:31
re:
Après plusieurs test j'ai constaté que les espace blanche au début et à la fin ils ont été supprimé
0
Utilisateur anonyme
13 mars 2013 à 18:47
deux solutions :

vider l'IFS pour read
while IFS='' read line...
ou utiliser REPLY
while read; do echo "$REPLY"; done <tonfichier
0
7amdolah Messages postés 17 Date d'inscription mercredi 2 janvier 2008 Statut Membre Dernière intervention 13 août 2014
13 mars 2013 à 19:00
Merci infiniment pour votre réponse et les consignes.

vider l'IFS pour read
while IFS='' read line..
.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
13 mars 2013 à 14:48
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 ?
0
7amdolah Messages postés 17 Date d'inscription mercredi 2 janvier 2008 Statut Membre Dernière intervention 13 août 2014
Modifié par 7amdolah le 13/03/2013 à 16:22
Le script est imposé,date début et date fin se sont que des valeur .
La commande cat transforme les lignes résultat est moi je veux que les lignes reste les mêmes que dans le fichier source.
merci d'avoir etre intercer par mon problem et vouloir m'aider
0