[SHELL] Plusieurs lignes sur une ligne

Fermé
magnetyk - 21 avril 2006 à 15:07
 magnetyk - 24 avril 2006 à 13:24
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 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 097
21 avril 2006 à 19:00
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 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
21 avril 2006 à 19:14
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
21 avril 2006 à 19:28
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
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