Nieznaczne wahania na odpowiedź Glenn Jackmana za pomocą paste
: jeśli wartość dla -d
opcji ogranicznika zawiera więcej niż jeden znak, paste
przechodzi po znaków jeden po drugim, i połączono z -s
opcji wciąż robi to podczas przetwarzania tego samego pliku wejściowego.
Oznacza to, że możemy użyć tego, co chcemy, jako separatora i sekwencji ucieczki \n
aby połączyć dwie linie jednocześnie.
Za pomocą przecinka:
$ 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
i znak dolara:
$ 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
Czego to nie może zrobić, to użyć separatora składającego się z wielu znaków.
Dodatkowo, jeśli paste
jest zgodny z POSIX, nie zmieni to nowej linii ostatniej linii w pliku, więc dla pliku wejściowego z nieparzystą liczbą linii, jak
KEY 4048:1736 string
3
KEY 0:1772 string
paste
nie przyczepi się do znaku separacji w ostatniej linii:
$ paste -s -d ',\n' infile
KEY 4048:1736 string,3
KEY 0:1772 string
pr
,paste
,awk
,xargs
,sed
ipure bash
! (xargs
jest wolniejszy, wolniejszy niż bash !)