Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1153 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Comment supprimer le retour à la ligne final d'un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment supprimer le retour à la ligne final d'un fichier

n°1319687
pem1996
Posté le 13-09-2012 à 15:28:56  profilanswer
 

Bonjour,
 
je cherche à compléter un fichier depuis un script avec un contrainte : parfois l'ajout se fait sur une nouvelle ligne, mais il est aussi possible de devoir ajouter à la fin de la dernière ligne.
 
Pas de soucis en court de script pour remplir des nouvelles lignes par morceaux donc revenir à la ligne quand c'est nécessaire ou compléter la ligne sinon.
 
Mais lorsque le script reprend un fichier ancien, celui-ci possède souvent un retour chariot à la fin ; or tous les moyens disponibles ne permettent pas de supprimer ce caractère pour ajouter un texte en fin de ligne. Idem pour les autres commandes comme sed ou akw qui soient permettent d'enlever la fin de ligne ailleurs qu'en fin de fichier, soit ne permettent pas d'identifier la dernière ligne.
 
 
Bref : peut-on "simplement" retirer ce fichu caractère ?
 
 
Quelques précisions :
- l'édition sous vi ajouter ce caractère, ça peut servir pour tester.
- sed permet de reconnaître la dernière ligne et supprimer le caractère de fin comme

Citation :

sed -i '$!N;s/\n//' conversion.log


le montre, mais dés que le ! ou le !N est supprimé, plus aucun effet !
- essayons awk puisque printf n'envoi pas \n

Citation :

awk '{print};END {printf $0}' conversion.log


supprime bien le \n final au prix d'un doublement de la dernière ligne !
peut-être qu'avec une variable ?

Citation :

awk '{t=t"\n"$0};END {printf t}' conversion.log


en effet plus de \n final ... qui se retrouve en tête
- alors une combinaison

Citation :

awk '{t=t"\n"$0};END {printf t}' conversion.log |sed  '/^$/d'


semble atteindre le résultat, sauf qu'il ne peut modifier le fichier d'origine puisqu'il faudrait rediriger la sortie sur le fichier d'entrée ce qu'il l'efface immédiatemennt
- finalement

Citation :

awk '{t=t"\n"$0};END {printf t}' conversion.log |sed  '/^$/d' > conversion.log_; mv conversion.log_ conversion.log


donne le résultat escompté au prix d'une longue commande et de la création d'un fichier temporaire.
 
 
N'y a-t-il pas plus simple ? Une option de echo, un motif de awk, les deux pour sed ou une simple commande qui permette cela ?
 
Merci.

mood
Publicité
Posté le 13-09-2012 à 15:28:56  profilanswer
 

n°1319695
Profil sup​primé
Posté le 13-09-2012 à 16:33:43  answer
 

salut,
 

Code :
  1. awk '{a[++n]=$0}END{for(i=1;i<n;i++)print a[i]; printf a[i]}' ./fichier


Message édité par Profil supprimé le 13-09-2012 à 16:34:28
n°1319704
pem1996
Posté le 13-09-2012 à 19:16:49  profilanswer
 

Merci watael. Effectivement passer par un tableau simplifie un peu.
 
Mais n'existe-t-il pas un moyen plus simple avec une commande comme sed ou même awk pour agir sur la dernière ligne ?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Comment supprimer le retour à la ligne final d'un fichier

 

Sujets relatifs
Erreur à l'install de gimp en ligne de commmandeSupprimer certains fichiers de dossiers et sous dossiers
Graver sur DVD simple couche un film HD de 7Go : comment faire ?fichier config samba
remplacer une ligne commencant par une chaineSystème de fichier en mémoire
Limesurvey - sondages en ligne Ecrire dans un fichier avec guillemets
Partage de fichier en ligne 
Plus de sujets relatifs à : Comment supprimer le retour à la ligne final d'un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR