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 :

Concaténer les fichiers selon un élément commun dans leurs noms


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2020
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2020
    Messages : 62
    Par défaut Concaténer les fichiers selon un élément commun dans leurs noms
    Bonjour,

    N'ayant pas eu de réponse à ma première sollicitation je remets le couvert ...

    Voila, dans un répertoire j'ai des fichiers dont le nom comporte un champs commun, ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TTTT-056.txt
    XXX-056.txt
    DDD-056.txt
    XXX-060.txt
    FFF-060.txt
    UUU-060.txt
    Je souhaite créer un fichier unique par champs commun, ex: 056 et 060

    J'extrait le champs commun:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NOM=`ls *.txt | cut -d'-' -f2 | sed 's/.txt//'`
    Je voudrai identifier tous les fichiers comportant ce champs commun et en créer un seul en sortie (concaténation), exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cat *056.txt >> 056.txt
    cat *060.txt >> 060.txt
    Comment faire ceci de manière automatique dans un script ?

    Merci.

  2. #2
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    Quelque chose comme ça ? (à exécuter dans le répertoire où se trouvent les fichiers en question)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while read -r line; do test -n "$line" && cat *"$line" >"$line"; done < <(ls -q1 | awk -F- '!a[$2]++{print $2}')

  3. #3
    Invité
    Invité(e)
    Par défaut
    je le remets ici, parce que tout le monde ne l'a pas vu :
    on n'utilise pas ls dans un script.
    on utilise stat qui peut n'afficher que les informations pertinentes pour le déroulement du script dans un format contrôlé.
    depuis le temps que je le dis, pourtant...
    bref.

    ou encore mieux, on utilise le shell :
    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for f in ./*.txt
    do
       nom="${f##*/}"
       IFS='-.' read -ra parts <<<"$nom"
       cat "$f" >> "./${parts[1]}.txt"
    done
    voilà, voilà.
    arrêtez de torturer la ligne de code.
    KISS*

    --
    * Keep It Simple Stupid
    ==
    ==
    EDIT :
    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    declare -A fichiers
    for f in ./*.txt
    do
       IFS='-.' read -ra parts <<<"${f##*/}"
       fichiers[${parts[1]}]+="$f"
    done
    for i in "${!fichiers[*]}"; do cat "${fichiers[$i]}" >./$i.txt; done
    pas testé. à vérifier.
    Dernière modification par Invité ; 03/02/2021 à 15h21.

  4. #4
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2020
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Mars 2020
    Messages : 62
    Par défaut Merci à tous.
    Super, merci à tous, et je n'oublie pas: stat et jamais ls !

    bonne journée.

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

Discussions similaires

  1. Trouver les éléments communs dans une même table
    Par lealexio dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/03/2020, 08h09
  2. Trouver les feuilles ayant un point commun dans leur nom
    Par Didpa dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/01/2019, 06h18
  3. Réponses: 9
    Dernier message: 04/02/2010, 16h36
  4. Imprimer tous les fichiers avec un mot spécifié dans le nom
    Par cyber-kaiser dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 11/06/2007, 13h35
  5. [MySQL] N'afficher que les fichiers du serveur Ftp insérés dans la base de données
    Par jack_1981 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 03/08/2006, 19h41

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