Po prostu użyj cat
(jeśli lubisz koty ;-)) i paste
:
cat file.in | paste -d, - - > file.out
Objaśnienie: paste
odczytuje 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). paste
pobiera 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 paste
radością przylega do pierwszego. Ta -d
opcja 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, - -