Utilisez simplement cat
(si vous aimez les chats ;-)) et paste
:
cat file.in | paste -d, - - > file.out
Explication: paste
lit dans un certain nombre de fichiers et colle ensemble les lignes correspondantes (ligne 1 du premier fichier avec ligne 1 du deuxième fichier, etc.):
paste file1 file2 ...
Au lieu d'un nom de fichier, nous pouvons utiliser -
(tiret). paste
prend la première ligne de file1 (qui est stdin). Ensuite, il veut lire la première ligne de file2 (qui est aussi stdin). Cependant, puisque la première ligne de stdin a déjà été lue et traitée, ce qui attend maintenant sur le flux d'entrée est la deuxième ligne de stdin, qui paste
se colle heureusement à la première. L' -d
option définit le délimiteur comme une virgule plutôt qu'un onglet.
Sinon, faire
cat file.in | sed "N;s/\n/,/" > file.out
PS Oui, on peut simplifier ce qui précède pour
< file.in sed "N;s/\n/,/" > file.out
ou
< file.in paste -d, - - > file.out
qui a l'avantage de ne pas utiliser cat
.
Cependant, je n'ai pas utilisé cet idiome exprès , pour des raisons de clarté - il est moins bavard et j'aime bien cat
(CATS ARE NICE). Alors s'il vous plaît ne pas éditer.
Alternativement, si vous préférez coller aux chats (coller est la commande pour concaténer des fichiers horizontalement, tandis que cat les concaténer verticalement), vous pouvez utiliser:
paste file.in | paste -d, - -