Concaténation de fichiers+suppression entête
misterblue
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
misterblue Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
misterblue Messages postés 6 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Sous le shell ksh.
J'aurais besoin de concaténer des fichiers textes plats .
Chaque fichier contient deux lignes d'en tête.
Mon besoin est de:
- supprimer la première ligne d'entête
- conserver la deuxième ligne d'en tête du premier fichier concaténé
- supprimer ces deux lignes d'entête pour les fichiers suivants concaténés
J'ai trouvé une solution (supposons que les fichiers à concaténer se nomment fichier_*.txt) :
#suppression des entêtes inutiles
tail +2 fichier_1.txt > fichier_1_tmp.txt
tail +3 fichier_2.txt > fichier_2_tmp.txt
tail +3 fichier_3.txt > fichier_3_tmp.txt
tail +3 ficheir_4.txt > fichier_4_tmp.txt
#concaténation vers un fichier final
cat fichier_1_tmp.txt fichier_2_tmp.txt fichier_3_tmp.txt fichier_4_tmp.txt > fichier_final.txt
Je trouve que c'est une solution consommatrice en resssources. Mais elle doit marcher.
(consommatrice en ressources parce qu'on passe deux fois sur chaques fichiers : une fois pour le tail, une fois pour le cat)
Par hasard, auriez-vous une autre solution efficace pour cette problématique ?
Merci par avance
Sous le shell ksh.
J'aurais besoin de concaténer des fichiers textes plats .
Chaque fichier contient deux lignes d'en tête.
Mon besoin est de:
- supprimer la première ligne d'entête
- conserver la deuxième ligne d'en tête du premier fichier concaténé
- supprimer ces deux lignes d'entête pour les fichiers suivants concaténés
J'ai trouvé une solution (supposons que les fichiers à concaténer se nomment fichier_*.txt) :
#suppression des entêtes inutiles
tail +2 fichier_1.txt > fichier_1_tmp.txt
tail +3 fichier_2.txt > fichier_2_tmp.txt
tail +3 fichier_3.txt > fichier_3_tmp.txt
tail +3 ficheir_4.txt > fichier_4_tmp.txt
#concaténation vers un fichier final
cat fichier_1_tmp.txt fichier_2_tmp.txt fichier_3_tmp.txt fichier_4_tmp.txt > fichier_final.txt
Je trouve que c'est une solution consommatrice en resssources. Mais elle doit marcher.
(consommatrice en ressources parce qu'on passe deux fois sur chaques fichiers : une fois pour le tail, une fois pour le cat)
Par hasard, auriez-vous une autre solution efficace pour cette problématique ?
Merci par avance
A voir également:
- Concaténation de fichiers+suppression entête
- Forcer suppression fichier - Guide
- Explorateur de fichiers - Guide
- Renommer des fichiers en masse - Guide
- Fichiers epub - Guide
- Gestionnaire de fichiers - Télécharger - Gestion de fichiers
6 réponses
Salut,
106485010510997108
tail +2 fichier_1.txt > fichier_final.txt for fic in $(ls fichier_[2-4].txt;do tail +3 $fic >>fichier_final;done--
106485010510997108
Salut,
;-))
ssh$ ls fich1.txt fich2.txt fich3.txt fich4.txt fich5.txt ssh$ cat fich* Entête 1 Entête 2 blablabla1 blablabllablabla Entête 1 Entête 2 blablabla2 blablabllablabla Entête 1 Entête 2 blablabla3 blablabllablabla Entête 1 Entête 2 blablabla4 blablabllablabla Entête 1 Entête 2 blablabla5 blablabllablabla ssh$ (sed '1d' fich1.txt && sed -s '1,2d' fich{2..5}.txt) > final.txt ssh$ cat final.txt Entête 2 blablabla1 blablabllablabla blablabla2 blablabllablabla blablabla3 blablabllablabla blablabla4 blablabllablabla blablabla5 blablabllablabla ssh$
;-))
hello
tu peux regrouper tes commandes entre () pour créer le fichier final
(tail +2 fichier_1.txt ; tail +3 fichier_2.txt ; tail +3 fichier_3.txt ; tail +3 fichier_4.txt ) > fichier_final.txt
tu peux regrouper tes commandes entre () pour créer le fichier final
(tail +2 fichier_1.txt ; tail +3 fichier_2.txt ; tail +3 fichier_3.txt ; tail +3 fichier_4.txt ) > fichier_final.txt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re,
Un peu moins d'écriture pour la solution de dubcek (que j'aime bien ;-)
Chez moi j'ai testé et j'ai une erreur si je n'utilise pas l'option -n
Un peu moins d'écriture pour la solution de dubcek (que j'aime bien ;-)
(tail -q +2 fichier_1.txt;tail -q +3 fichier_[2-4].txt) > fichier_final.txt
Chez moi j'ai testé et j'ai une erreur si je n'utilise pas l'option -n
(tail -q -n +2 fichier_1.txt;tail -q -n +3 fichier_[2-4].txt) > fichier_final.txt