44 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?

74voto

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
 

67voto

glenn jackman Points 69748

paste est bon pour ce travail:

 paste -d " "  - - < filename
 

17voto

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.

9voto

Hai Vu Points 10359

Voici ma solution en bash:

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

9voto

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
 

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: