Po prostu użyj cat(jeśli lubisz koty ;-)) i paste:
cat file.in | paste -d, - - > file.out
Objaśnienie: pasteodczytuje z wielu plików i wkleja razem odpowiednie linie (linia 1 z pierwszego pliku z linią 1 z drugiego pliku itp.):
paste file1 file2 ...
Zamiast nazwy pliku możemy użyć -(myślnik). pastepobiera pierwszy wiersz z pliku1 (który jest standardem). Następnie chce odczytać pierwszy wiersz z pliku2 (który jest również stdin). Ponieważ jednak pierwszy wiersz stdin został już odczytany i przetworzony, w strumieniu wejściowym czeka teraz druga linia stdin, która z pasteradością przylega do pierwszego. Ta -dopcja ustawia separator jako przecinek, a nie tabulator.
Możesz też zrobić
cat file.in | sed "N;s/\n/,/" > file.out
PS Tak, można uprościć powyższe do
< file.in sed "N;s/\n/,/" > file.out
lub
< file.in paste -d, - - > file.out
który ma tę zaletę, że nie używa cat.
Jednak nie użyłem tego idiomu celowo , ze względu na przejrzystość - jest mniej gadatliwy i lubię cat(CATS ARE NICE). Więc proszę nie edytować.
Alternatywnie, jeśli wolisz wklejanie niż koty (wklej to polecenie łączenia plików w poziomie, podczas gdy kot łączy je w pionie), możesz użyć:
paste file.in | paste -d, - -