Ajouter un nouveau champs a un fichier csv
Résolu
bendjiz
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
bendjiz Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
bendjiz Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous je suis nouveau sur ce site et j'aimerais vous soumettre un problème. Le problème est que je souhaite avec un script shell ajouter a un fichier csv un nouveau champs, je m'explique par un exemple: j'ai un fichier csv qui contient plusieurs champs et plusieur lignes comme celui ci
toto;titi;tata;...
dada; mimi;....
roro; riri; tomi;popo;...
Ce que j'essai de faire c'est de réccupérer la date de la derniere modification du fichier et l'ajouter au differentes lignes de mon fichier ce qui me donnera:
toto;titi;tata;...;23-01-1998
dada; mimi;....;23-01-1998
roro; riri; tomi;popo;...;23-01-1998
J'espere avoir expliqué clairement ma preoccupation, merci de m'aider .
toto;titi;tata;...
dada; mimi;....
roro; riri; tomi;popo;...
Ce que j'essai de faire c'est de réccupérer la date de la derniere modification du fichier et l'ajouter au differentes lignes de mon fichier ce qui me donnera:
toto;titi;tata;...;23-01-1998
dada; mimi;....;23-01-1998
roro; riri; tomi;popo;...;23-01-1998
J'espere avoir expliqué clairement ma preoccupation, merci de m'aider .
3 réponses
-
Salut,
jp@MDK:~/tmpfs ssh$ cat ben toto;titi;tata;... dada; mimi;.... roro; riri; tomi;popo;... jp@MDK:~/tmpfs ssh$ sed -i.bak 's/$/;23-01-1998/' ben jp@MDK:~/tmpfs ssh$ cat ben toto;titi;tata;...;23-01-1998 dada; mimi;....;23-01-1998 roro; riri; tomi;popo;...;23-01-1998 jp@MDK:~/tmpfs ssh$ cat ben.bak toto;titi;tata;... dada; mimi;.... roro; riri; tomi;popo;... jp@MDK:~/tmpfs ssh$
;-))
-
Merci Jipicy,
mais quand j'utilise le sed -i je reçois une erreur ainsi libéllé: sed: illegal option --i . Aussi je souhaiterais que tu m'aides à savoir comment insérer la commande stat -c '%y' zac.csv qui me renvoie la date de la derniere modification du fichier zac.csv dans le script que tu m'a envoyé. Encore merci de m'aider -
Quel système d'exploitation ?
Quelle version de sed ?
Si l'option "-i" n'existe pas il faut rediriger la sortie vers un fichier temporaire et écraser l'original par la suite...
Édit :
[tmpfs]$ cat ben.bak toto;titi;tata;... dada; mimi;.... roro; riri; tomi;popo;... [tmpfs]$ STAT=$(stat -c ";%y" ben) [tmpfs]$ sed 's/$/'"${STAT}"'/' ben.bak > temp && mv -f temp ben.bak [tmpfs]$ cat ben.bak toto;titi;tata;...;2010-04-27 15:30:25.733695153 +0200 dada; mimi;....;2010-04-27 15:30:25.733695153 +0200 roro; riri; tomi;popo;...;2010-04-27 15:30:25.733695153 +0200 [tmpfs]$
:-)) -
-
-
-
-
en bash, je sais pas (bien que ce doit être similaire), mais en Perl
#!/usr/bin/perl -w use strict; use warnings; my $file= "fichier.csv"; my $fout = "sortie_$file"; my $datefile = (stat($file))[9]; open F, "$file" or die "ouverture de $file impossible $!"; my @contenu = <F>; close F || die "Fermeture de $file impossible $!"; foreach $l(@contenu) { chomp $l; #$nl.= "$datefile\n"; $nl = "$l" . "$datefile\n"; push @nwcontenu, $nl; } open FOUT, ">$fout" or die "Ouverture de $fout impossible $!"; print FOUT @nwcontenu; close FOUT || die "Fermeture de $fout impossible $!"; END;
Voilà, j'ai pas testé mais ça devrai le faire.
Si maintenant, c'est les toto ou rara qui représente les nom de fichiers que tu dois dater à leur dernière modif,
adapte en placant dans la boucle foreach la ligne
my $datefile = (stat($file))[9];
en dégageant $file par une reconnaissance de motif ou un split(/;/, $l)-
-
Salut,
Si je peux me permettre
#!/usr/bin/perl use strict; use warnings; my $file= "fichier.csv"; my $fout = "sortie_$file"; open F, "$file" or die "ouverture de $file impossible $!"; open FOUT, ">$fout" or die "Ouverture de $fout impossible $!"; my $datefile = (stat($file))[9]; my ($d,$m,$a)=(localtime($datefile))[3..5]; $m=sprintf("%02d",$m+1); $a+=1900; foreach my $l(<F>) { chomp $l; print FOUT "$l;$d-$m-$a\n"; } END; -
-
-
hello
une version avec awk$ ls -ln a1 -rw-r--r-- 1 1000 1000 61 1999-11-22 11:22 a1 $ $ awk '!x {a="date -r " FILENAME " +\"%d-%m-%Y\""; a |getline date ; x++};{ print $0 ";" date}' a1 toto;titi;tata;...;22-11-1999 dada; mimi;....;22-11-1999 roro; riri; tomi;popo;...;22-11-1999 $