Une légère variation de la réponse de Glenn Jackman en utilisant paste: si la valeur de l' -doption délimiteur contient plus d'un caractère, fait pastedéfiler les caractères un par un et combiné avec les -soptions 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 \npour 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 pasteest 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,sedetpure bash! (xargsest le plus lent, le plus lent que bash !)