[SHELL] Plusieurs lignes sur une ligne

magnetyk -  
 magnetyk -
Bonjour,

Je cherche à faire 2 choses à partir d'un fichier contenant :

/home/test/fichier1.txt
...
/home/test/fichier2.exe
...
/home/test/fichier3.xls


1) Je voudrais concaténer chaque ligne sur une seule ligne d'un autre fichier
2) Chaque ligne insérée doit avoir un double-quote avant et apres (ainsi qu'un espace entre chaque ligne copiée)

Le fichier résultat ressemblerait donc à ça :

"/home/test/fichier1.txt" "/home/test/fichier2.exe" "/home/test/fichier3.xls"


J'ai vu que certaines personnes sont spécialisées dans les scripts shell (ou perl).

je vous remercie d'avance des réponses :) Bon week-end !!
A voir également:

4 réponses

[Dal] Messages postés 6373 Statut Contributeur 1 106
 
Salut Magnetyk,

Si tu ne reçois pas de réponse, c'est que ta question est probablement difficilement cernable.

Bon, alors, par exemple :

Je cherche à faire 2 choses à partir d'un fichier contenant :
/home/test/fichier1.txt
...
/home/test/fichier2.exe
...
/home/test/fichier3.xls


Ton fichier contient donc 5 lignes seulement, dont deux lignes intercalées composées de trois points à la suite. Tu as plus vite fait de faire à la main ce que tu veux faire :P

A moins que tu veuilles dire autre chose ?


Dal
0
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité 3 570
 
Salut,

Que veut dire les ... entre tes lignes?
Tu as combiens des lignes dans ton fichier?

Voilà un exemple en Perl (j'ai utilisé comme exemple tes lignes).
Pour mieux faire il faut savoir la structure de tes fichiers.
#!/usr/bin/perl

use warnings;

open WRITE, ">>./resultat.txt" or die "E/S : $!\n";

while (<>){
  next unless /^\/home/;
  s/^(.*)\n/"$1" /;
  print WRITE $_;
}
print WRITE "\n";

Le resultat
[lamitest@localhost trash]$ cat magnetyk.txt
/home/test/fichier1.txt
...
/home/test/fichier2.exe
...
/home/test/fichier3.xls
[lamitest@localhost trash]$ cat magnetyk2.txt
/home/test/fichier4.txt
...
/home/test/fichier5.exe
...
/home/test/fichier6.xls
[lamitest@localhost trash]$ perl ccm_magnetyk_lines.pl magnetyk.txt
[lamitest@localhost trash]$ cat resultat.txt
"/home/test/fichier1.txt" "/home/test/fichier2.exe" "/home/test/fichier3.xls"
[lamitest@localhost trash]$ perl ccm_magnetyk_lines.pl magnetyk2.txt
[lamitest@localhost trash]$ cat resultat.txt
"/home/test/fichier1.txt" "/home/test/fichier2.exe" "/home/test/fichier3.xls"
"/home/test/fichier4.txt" "/home/test/fichier5.exe" "/home/test/fichier6.xls"
[lamitest@localhost trash]$


lami20j

P.S. C'était mieux dans le forum Programmation
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

Si les "..." ne sont qu'une abréviation pour signifier des lignes de texte intermédiaires identiques à celles d'avant et d'après, alors un simple :
while read ligne; do echo -e "\"$ligne\" \c"; done < ton_fichier
devrait suffire.
Éventuellement si tu dois récupérer le résultat dans un autre fichier (dans l'exemple là, c'est sur la sortie standard, l'écran), redirige le tout vers un autre fichier alors...
while read ligne; do echo -e "\"$ligne\" \c"; done < ton_fichier > resultat.txt
;-))
0
magnetyk
 
Merci beaucoup pour vos éléments de réponse. Désolé de ne pas avoir été assez spécifique dans ma question, les trois points (...) signifiaient en fait qu'il y avait un nombre indécis de lignes dans mon fichier texte.

J'ai opté pour la dernière solution postée par jipicy :) Merci de votre aide, j'hésiterai pas à revenir sur ce forum !
0