Une équivalence à la commande "echo"

Une équivalence à la commande "echo" - Shell/Batch - Programmation

Marsh Posté le 11-09-2006 à 19:00:09    

Un problème tout simple : en entrée, j'ai un fichier list1 avec une suite de caractères alphanumériques de 20 octets par ligne ; je souhaite abouter ces lignes les unes après les autres dans un fichier résultat list2 en les séparant par 10 'espaces' sans retour à la ligne.
 
Avec un fichier d'entrée contenant moins de 50000 lignes ça passe sans problème avec la commande echo :
 
for i in `cat list1`
do
echo "$i         \c" >> list2
done
 
Au dela de 50000 lignes (ce qui est mon cas) la commande echo ne fonctionne plus (et toute façon ce serait bien lent). Une idée ?
 
Merci :hello:

Reply

Marsh Posté le 11-09-2006 à 19:00:09   

Reply

Marsh Posté le 11-09-2006 à 19:07:29    

sed "s/\n/          /g" list1 > fichierresultat

Message cité 3 fois
Message édité par betsamee le 11-09-2006 à 19:25:18
Reply

Marsh Posté le 11-09-2006 à 19:18:39    

betsamee a écrit :

cat list1 > awk'{print $1"          "}'

Je vais avoir un fichier de sortie avec un nombre de lignes égal à mon fichier list1, non ?

Reply

Marsh Posté le 11-09-2006 à 19:21:24    

betsamee a écrit :

cat list1 > awk'{print $1"          "}'


 :non: Rien à voir avec ce qui est demandé, la commande affiche le premier champ du fichier list1 suivi de blancs et sans aboutement des lignes.
De plus, ce n'est pas une redirection (> ) qu'il faut faire mais un pipe (|). De toutes façon ce pipe est inutile car on peut spécifier le nom du fichier en argument de la commande awk.
 
Edit :ange: Désolé, j'ai lu trop rapidement le post de epo03; $1 convient bien car le contenu de la ligne est alphanumérique, donc pas de séparateur de champ à redouter (théoriquement). Ceci-étant, il est plus prudent d'utiliser $0. Fin-Edit
 
A tester :

# On redefini le séparateur de ligne en sortie comme étant  
# dix espaces, sans saut de ligne : -v ORS="          "
# Toutes les lignes en entrée sont affichées : 1
# Le fichier en entrée est : list1
 
awk -v ORS="          " 1 list1

Une autre solution plus classique toujours avec awk :

awk '{ printf("%s          ",$0)}' list1

Message cité 1 fois
Message édité par aigles le 11-09-2006 à 19:27:44

---------------
Jean Pierre.
Reply

Marsh Posté le 11-09-2006 à 19:24:04    

La solution de Jean Pierre me semble plus adapté à mon pb.
Merci je teste tout ça demain :hello:

Reply

Marsh Posté le 11-09-2006 à 19:26:06    

ok au temps pour moi :jap:
la solution sed que j ai proposee est erronee?

Reply

Marsh Posté le 12-09-2006 à 08:56:28    

betsamee a écrit :

cat list1 > awk'{print $1"          "}'


 

aigles a écrit :

:non: Rien à voir avec ce qui est demandé, la commande affiche le premier champ du fichier list1 suivi de blancs et sans aboutement des lignes.
De plus, ce n'est pas une redirection (> ) qu'il faut faire mais un pipe (|). De toutes façon ce pipe est inutile car on peut spécifier le nom du fichier en argument de la commande awk.


De plus, il faut un espace entre la commande "awk" et ses instructions '{...}'

Message cité 1 fois
Message édité par Sve@r le 12-09-2006 à 09:01:15

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 12-09-2006 à 09:08:07    

Sve@r a écrit :

De plus, il faut un espace entre la commande "awk" et ses instructions '{...}'


le > a la place du | est une erreur d'innatention :jap:

Reply

Marsh Posté le 12-09-2006 à 18:21:23    

Les solutions de Jean Pierre fonctionnent parfaitement et à une vitesse supersonique ; demain je teste le sed
Merci à tous :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed