2009-10-03 5 views
23

Avec un simple script bash je produis un fichier texte avec de nombreuses lignes comme ceci:Comment associer deux lignes d'un fichier texte avec Bash?

192.168.1.1 
hostname1 
192.168.1.2 
hostname2 
192.168.1.3 
hostname3 

Maintenant, je veux reformater ce fichier de sorte qu'il ressemble à ceci:

192.168.1.1 hostname1 
192.168.1.2 hostname2 
192.168.1.3 hostname3 

Comment pourrais-je le reformater de cette façon? Peut-être sed?

+1

pourquoi ne produisez pas vous générez dans le format souhaitable de commencer? – SilentGhost

Répondre

28
$ sed '$!N;s/\n/ /' infile 
192.168.1.1 hostname1 
192.168.1.2 hostname2 
192.168.1.3 hostname3 
+0

Pourriez-vous s'il vous plait expliquer comment ça s'est passé? – NawaMan

+0

merci. exactement ce que je cherche. :) – fwaechter

+5

@NawaMan: Si vous voulez dire "comment ça marche?" alors: Si ce n'est pas (!) la dernière ligne ($) puis ajoutez la ligne suivante (N) et remplacez la nouvelle ligne par un espace (s/\ n//) et répétez en commençant par la ligne suivante (qui sera le 3ème, 5ème, etc.). –

30

est ici une coquille seule alternative:

while read first; do read second; echo "$first $second"; done 
+1

Mais vous devriez [toujours] (http://wiki.bash-hackers.org/commands/builtin/read#read_without_-r) utiliser l'indicateur '' -r'' avec '' read''. –

+1

est-ce que la ligne 'done' doit être' fait

13

J'adore la simplicité de cette solution

cat infile | paste -sd ' \n' 

192.168.1.1 hostname1 
192.168.1.2 hostname2 
192.168.1.3 hostname3 

ou faire séparés par des virgules au lieu de l'espace séparé

cat infile | paste -sd ',\n' 

et si votre fichier d'entrée est ha d une troisième ligne comme horodatage

192.168.1.1 
hostname1 
14423289909 
192.168.1.2 
hostname2 
14423289910 
192.168.1.3 
hostname3 
14423289911 

alors le seul changement est d'ajouter un autre espace dans la liste delimiter

cat infile | paste -sd ' \n' 

192.168.1.1 hostname1 14423289909 
192.168.1.2 hostname2 14423289910 
192.168.1.3 hostname3 14423289911 
+0

C'est concis, facile à comprendre et très évolutif. Merci! – musiphil

Questions connexes