IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Cut et retour à la ligne


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Par défaut
    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 )

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  4. #4
    Membre très actif
    Avatar de vosaray
    Profil pro
    Architecte technique
    Inscrit en
    Mai 2004
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2004
    Messages : 217
    Par défaut
    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 .

  5. #5
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    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.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Par défaut
    merci

    quand je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    grep "$" monfichier | cut -d";" -f1
    ca marche

  7. #7
    Membre chevronné Avatar de herzleid
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2002
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Juin 2002
    Messages : 393
    Par défaut
    As-tu essayé la solution de MarcG ('lutilisation de tail et de head) ?

  8. #8
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (cat $FIC;echo) | cut -d";" -f1-$NB

  9. #9
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ echo 'hello\nworld\c' | sed 's/o/@/'
    hell@
    w@rld

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Par défaut
    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

  11. #11
    Membre chevronné Avatar de herzleid
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2002
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Juin 2002
    Messages : 393
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Par défaut
    Petite question subsidiaire

    Est ce normal ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  13. #13
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    quel est ton os?

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Par défaut
    HP-UX
    version B11-10 U je crois

  15. #15
    Membre chevronné Avatar de herzleid
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juin 2002
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Juin 2002
    Messages : 393
    Par défaut
    Etrange je viens d'essayer sur un HP_UX B.11.11 U 9000 et j'obtiens :

    toto
    titi

  16. #16
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    je tente une astuce :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Par défaut
    en fait on est en version
    B.11.11 U 9000/800

  18. #18
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    Pourquoi ne pas demander simplement l'affichage des x premières colonnes plutôt que de supprimer les y dernières?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -v FS=";" '{print $1,$2,$3}' fichier.a.traiter

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Retour à la ligne dynamique
    Par stailer dans le forum ASP.NET
    Réponses: 2
    Dernier message: 07/02/2005, 13h53
  2. [langage] compter les retour à la ligne
    Par Kinethe dans le forum Langage
    Réponses: 4
    Dernier message: 16/07/2004, 17h36
  3. Comment faire un retour a la ligne dans un tableaux Word
    Par alexmorel dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 17/06/2004, 10h31
  4. Réponses: 2
    Dernier message: 08/06/2004, 15h42
  5. Réponses: 8
    Dernier message: 02/04/2004, 18h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo