Một thay đổi nhỏ về câu trả lời của glenn jackman bằng cách sử dụng paste
: nếu giá trị cho -d
tùy chọn dấu phân cách chứa nhiều hơn một ký tự, chuyển paste
qua từng ký tự và kết hợp với các -s
tùy chọn tiếp tục thực hiện điều đó trong khi xử lý cùng một tệp đầu vào.
Điều này có nghĩa là chúng ta có thể sử dụng bất cứ thứ gì chúng ta muốn có như dấu phân cách cộng với chuỗi thoát \n
để hợp nhất hai dòng cùng một lúc.
Sử dụng dấu phẩy:
$ 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
và ký hiệu đô la:
$ 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ều này không thể làm là sử dụng một dấu phân cách bao gồm nhiều ký tự.
Như một phần thưởng, nếu paste
tuân thủ POSIX, điều này sẽ không sửa đổi dòng mới của dòng cuối cùng trong tệp, vì vậy đối với một tệp đầu vào có số lượng dòng lẻ như
KEY 4048:1736 string
3
KEY 0:1772 string
paste
sẽ không giải quyết ký tự phân tách trên dòng cuối cùng:
$ paste -s -d ',\n' infile
KEY 4048:1736 string,3
KEY 0:1772 string
pr
,paste
,awk
,xargs
,sed
vàpure bash
! (xargs
là chậm hơn, chậm hơn bash !)