Ajouter un nouveau champs a un fichier csv

Résolu/Fermé
bendjiz Messages postés 24 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 22 juin 2010 - 27 avril 2010 à 15:12
bendjiz Messages postés 24 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 22 juin 2010 - 28 avril 2010 à 13:09
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 .


A voir également:

3 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 894
27 avril 2010 à 15:31
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$


;-))
0
bendjiz Messages postés 24 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 22 juin 2010
27 avril 2010 à 17:32
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
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 894
Modifié par jipicy le 27/04/2010 à 17:56
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]$

:-))
0
bendjiz Messages postés 24 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 22 juin 2010
27 avril 2010 à 18:08
Merci beaucoup jipicy, est ce possible qu'on échange nos mails?
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 894
27 avril 2010 à 18:10
Re-

Non ! Le forum est largement plus efficace qu'un individu tout seul ;-\
0
bendjiz Messages postés 24 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 22 juin 2010
27 avril 2010 à 18:33
ok! sans soucis merci encore
0
al_right Messages postés 140 Date d'inscription dimanche 25 avril 2010 Statut Membre Dernière intervention 7 mai 2011 9
27 avril 2010 à 16:39
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)
0
bendjiz Messages postés 24 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 22 juin 2010
27 avril 2010 à 18:09
Merci beaucoup pour ta reactivité al_right
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
Modifié par lami20j le 28/04/2010 à 11:57
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;
0
bendjiz Messages postés 24 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 22 juin 2010
28 avril 2010 à 13:08
merci
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
28 avril 2010 à 10:39
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
$
0
bendjiz Messages postés 24 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 22 juin 2010
28 avril 2010 à 13:09
merci pour ta reponse
0