Une légère variation de la réponse de Glenn Jackman en utilisant paste
: si la valeur de l' -d
option délimiteur contient plus d'un caractère, fait paste
défiler les caractères un par un et combiné avec les -s
options continue de le faire tout en traitant le même fichier d'entrée.
Cela signifie que nous pouvons utiliser tout ce que nous voulons comme séparateur plus la séquence d'échappement \n
pour fusionner deux lignes à la fois.
En utilisant une virgule:
$ paste -s -d ',\n' infile
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
et le signe dollar:
$ paste -s -d '$\n' infile
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 que cela ne peut pas faire, c'est utiliser un séparateur composé de plusieurs caractères.
En prime, si le paste
est compatible POSIX, cela ne modifiera pas la nouvelle ligne de la dernière ligne du fichier, donc pour un fichier d'entrée avec un nombre impair de lignes comme
KEY 4048:1736 string
3
KEY 0:1772 string
paste
ne clouera pas sur le caractère de séparation sur la dernière ligne:
$ paste -s -d ',\n' infile
KEY 4048:1736 string,3
KEY 0:1772 string
pr
,paste
,awk
,xargs
,sed
etpure bash
! (xargs
est le plus lent, le plus lent que bash !)