130 votes

Fusionner deux lignes en une

J'ai un fichier texte au format suivant. La première ligne est la "KEY" et la deuxième ligne est la "valeur".

 KEY 4048:1736 string
3
KEY 0:1772 string
1
KEY 4192:1349 string
1
KEY 7329:2407 string
2
KEY 0:1774 string
1
 

J'ai besoin de la valeur dans la même ligne que de la clé. Donc, la sortie devrait ressembler à ceci ...

 KEY 4048:1736 string 3
KEY 0:1772 string 1
KEY 4192:1349 string 1
KEY 7329:2407 string 2
KEY 0:1774 string 1
 

Ce sera mieux si je pouvais utiliser un délimiteur comme $ ou, KEY 4048: 1736 string, 3

Comment fusionner deux lignes en une seule?

214voto

glenn jackman Points 69748

paste est bon pour ce travail:

 paste -d " "  - - < filename
 

159voto

Kent Points 71470

awk:

 awk 'NR%2{printf $0" ";next;}1' yourFile
 

remarque, il y a une ligne vide à la fin de la sortie.

sed:

 sed 'N;s/\n/ /' yourFile
 

25voto

ghoti Points 14996

Beaucoup de façons de peler le chat.

 awk '{key=$0; getline; print key ", " $0;}'
 

Mettez le délimiteur que vous aimez dans les guillemets.

11voto

J.D. Points 83

Bien qu'il semble que les solutions précédentes fonctionneraient, si une seule anomalie se produisait dans le document, la sortie serait fragmentée. Ci-dessous est un peu plus sûr.

 sed -n '/KEY/{
N
s/\n/ /p
}' somefile.txt
 

10voto

Hai Vu Points 10359

Voici ma solution en bash:

 while read line1; do read line2; echo "$line1, $line2"; done < data.txt
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: