Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/06/2006, 19h31   #1
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 83
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 83
Points : 36
Points : 36
Par défaut Cut et retour à la ligne

Bonjour,

J'ai un petit souci, j'ai fait un petit script qui retire les N dernieres colonnes d'un fichier csv. Ce fichier ce compose d'un header et d'un footer qui comporte moins de colonnes que les données du fichier.

Le hic c'est que quand je fais un
Code :
cat $FIC | cut -d";" -f1-$NB
sur mes données réeles bah ca me vire le footer.

J'examine mes données réeles et remarque qu'il n'y a pas de retour à la ligne à la fin du fichier, j'en rajoute une et comme par enchantement ca marche.

Maiiiis pourtant quand je crée un fichier de test sous vi, tout bete sans retour à la ligne ca marche ...

Est ce que quelqu'un sait pourquoi ? et comment contourner ce probleme ?
Slein est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2006, 07h28   #2
Rédacteur
 
Inscription : mars 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 298
Points : 1 450
Points : 1 450
deja pourquoi utiliser cat et | pour un cut ???? reflexe conditionner au | ? nous ne sommes pas au stade de foot de Berlin

sinon avec les commande head et tail tu devrait pouvoir virer la 1ere et la derniere ligne avant le cut ....
(et la ok un bon pipe )
__________________
Marc
Slackware for ever ......
BASH - KSH ( http://marcg.developpez.com/ksh/ )
MarcG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2006, 16h04   #3
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 83
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 83
Points : 36
Points : 36
Citation:
Envoyé par MarcG
deja pourquoi utiliser cat et | pour un cut ???? reflexe conditionner au | ? nous ne sommes pas au stade de foot de Berlin


bah le truc que je ne comprends pas en fait c'est que j'ai un fichier comme ca :

Code :
1
2
3
4
5
6
h;toto;titi
d;arbre;maison;chat;lapin
d;arbre;maison;chat;lapin
d;arbre;maison;chat;lapin
d;arbre;maison;chat;lapin
f;footer;fifi
le fichier ne se termine pas par un saut de ligne.

je fais un cut ou je recupere les 3 premieres colonnes (donc en fait virer le footer et header pour les remettres aprés ca ne m'interesse pas vu qu'ils n'ont que 3 colonnes) et là ... il me sors :

Code :
1
2
3
4
5
h;toto;titi
d;arbre;maison;chat
d;arbre;maison;chat
d;arbre;maison;chat
d;arbre;maison;chat
je ne sais pas pourquoi il me vire le footer... ce fichier de données est généré il me semble par un script perl. Quand je crée à la mano un fichier semblable, le cut me sors bien le footer.

Y a t'il un moyen de visualiser les caracteres speciaux present dans les fichiers ? Y a t'il un moyen pour que le cut prenne en compte cette derniere ligne ?
Slein est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2006, 23h48   #4
Membre confirmé
 
Avatar de vosaray
 
Inscription : mai 2004
Messages : 208
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 208
Points : 211
Points : 211
Citation:
Y a t'il un moyen de visualiser les caracteres speciaux present dans les fichiers ?

vim monfichier
:se list


Ca va t'afficher tous les caracteres speciaux, y compris les rc.

Sinon, pour traiter des fichiers csv je pense que tu vas moins galerer en utlisant perl .
vosaray est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2006, 10h36   #5
Membre Expert
 
Avatar de 2Eurocents
 
Inscription : septembre 2004
Messages : 2 180
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : septembre 2004
Messages : 2 180
Points : 2 442
Points : 2 442
Citation:
Envoyé par Slein
Y a t'il un moyen de visualiser les caracteres speciaux present dans les fichiers ?
En l'occurence, les dernières lignes du "dump" devraient nous renseigner, puisque ton problème porte sur la fin du fichier.
__________________
La FAQ Perl est par ici
: La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !
2Eurocents est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2006, 10h41   #6
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 83
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 83
Points : 36
Points : 36
merci

quand je fais un
Code :
1
2
vim monfichier
:se list
les deux fichiers ont des $ à chaque fin de ligne

me montre la difference entre les 2 fichiers, la derniere ligne de celui qui ne marche pas ne contient pas de "\n"

mais en faisant un
Code :
grep "$" monfichier | cut -d";" -f1
ca marche
Slein est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2006, 11h06   #7
Membre éclairé
 
Avatar de herzleid
 
Inscription : juin 2002
Messages : 376
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juin 2002
Messages : 376
Points : 388
Points : 388
As-tu essayé la solution de MarcG ('lutilisation de tail et de head) ?
__________________
www.kywyxy.net
herzleid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2006, 11h48   #8
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
Code :
(cat $FIC;echo) | cut -d";" -f1-$NB
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2006, 11h54   #9
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
note que sur AIX, le cut fonctionne bien

le "sed" par contre ne fonctionne qu'à partir de la 5.2. C'est un des rares "bugs" de sed qui ait été fixé ce siècle
--> AIX5.1
Code :
1
2
3
4
5
6
 
$ echo 'hello\nworld\c' | cut -f1         
hello
world
$ echo 'hello\nworld\c' | sed 's/o/@/'
hell@
--> AIX5.2
Code :
1
2
3
$ echo 'hello\nworld\c' | sed 's/o/@/'
hell@
w@rld
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2006, 13h06   #10
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 83
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 83
Points : 36
Points : 36
Citation:
Envoyé par herzleid
As-tu essayé la solution de MarcG ('lutilisation de tail et de head) ?
Nop, en fait dans mon fichier final je veux garder le header et le footer ... donc ca vaut pas le coup à mon avis de les enlever pour les remettre juste aprés.

merci pour votre aide
Slein est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2006, 14h28   #11
Membre éclairé
 
Avatar de herzleid
 
Inscription : juin 2002
Messages : 376
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juin 2002
Messages : 376
Points : 388
Points : 388
moi j'aurai mis le header dans une variable et le footer dans une autre.

Tu as ainsi un code modulable, et la récupération de ces infos, comme tu veux. Pratique éventuellement pour les futurs besoins. Mais là tu es seul juge.
Sinon tu peux toujours récupérer le nombre de lignes total (commande wc) puis faire une boucle de 2 à nb de linge -1. Tu applique ton cut à ta boucle boucle .
genre:
Code :
1
2
3
4
5
6
7
8
 
nb=`wc -l fichier| cut -c-1`
nb=$nb-1
compteur=2
for i in for i in `seq $compteur $nb`
do
ton_cut
done
Attention c'est en gros, à adapter en plus propre et par rapport à ton shell.
__________________
www.kywyxy.net
herzleid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2006, 18h41   #12
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 83
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 83
Points : 36
Points : 36
Petite question subsidiaire

Est ce normal ?
Code :
1
2
3
#>echo "toto\ntiti\c" | tail -1
toto
titi#>
en gros ca me fait ca avec toutes les commandes pour une ligne de la forme suivante :

"toto\ntiti\c"

pour un
"toto\ntiti\n" ca marche niquel
Slein est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2006, 19h58   #13
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
quel est ton os?
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2006, 08h47   #14
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 83
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 83
Points : 36
Points : 36
HP-UX
version B11-10 U je crois
Slein est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2006, 10h01   #15
Membre éclairé
 
Avatar de herzleid
 
Inscription : juin 2002
Messages : 376
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juin 2002
Messages : 376
Points : 388
Points : 388
Etrange je viens d'essayer sur un HP_UX B.11.11 U 9000 et j'obtiens :

toto
titi
__________________
www.kywyxy.net
herzleid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2006, 10h04   #16
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
je tente une astuce :

Code :
1
2
3
4
5
6
7
8
 
$ CMD="tail -1"
$ echo "toto\ntiti" > fichier                                                       
$ [ -z "$(tail -1c fichier)" ]&&cat fichier|$CMD||(cat fichier;echo)|$CMD
titi
$ echo "toto\ntiti\c" > fichier                                                     
$ [ -z "$(tail -1c fichier)" ]&&cat fichier|$CMD||(cat fichier;echo)|$CMD
titi
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2006, 10h10   #17
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 83
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 83
Points : 36
Points : 36
en fait on est en version
B.11.11 U 9000/800
Slein est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2006, 10h42   #18
Membre émérite
 
Inscription : mai 2004
Messages : 708
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 708
Points : 853
Points : 853
Pourquoi ne pas demander simplement l'affichage des x premières colonnes plutôt que de supprimer les y dernières?

Code :
awk -v FS=";" '{print $1,$2,$3}' fichier.a.traiter
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2006, 11h53   #19
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 83
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 83
Points : 36
Points : 36
Citation:
Envoyé par ripat
Pourquoi ne pas demander simplement l'affichage des x premières colonnes plutôt que de supprimer les y dernières?
Bah c'est ce que je fais mais avec un cut

Merci pour vos solutions
Slein est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h19.


 
 
 
 
Partenaires

Hébergement Web