lệnh dán: thiết lập (nhiều) dấu phân cách


9

Trong Linux, tôi gặp vấn đề sau với paste(GNU coreutils) 8.13:

Cố gắng đặt một dấu phân cách khác so với mặc định (TAB) dẫn đến việc chỉ in ký tự đầu tiên của dấu phân cách đã xác định hoặc bỏ qua nó một cách hoàn hảo.

Câu hỏi : Làm thế nào để xác định (nhiều) dấu phân cách khi sử dụng paste ?

Đơn giản chỉ cần sử dụng, ví dụ abc-123 là dấu phân cách sẽ tốt. Với "nhiều" tôi có nghĩa là 2 TABS thay vì một.


Các mẫu bao quanh (các) dấu phân cách mà tôi đã thử cho đến nay là

  • --delimiters="\delimiter"
  • --delimiters='\delimiter'
  • --delimiters=$"\delimiter"
  • --delimiters=$'\delimiter'

Tất cả đều có cùng một kết quả: Chỉ có ký tự đầu tiên được chấp nhận hoặc bỏ qua hoàn hảo. Tôi cũng đã thử phiên bản ngắn -d"\"và nhiều phiên bản & ndahs; không có gì.

Cũng thế:

  • --delimiters="\\" → Thông báo lỗi

Những gì hoạt động hoàn hảo, mặc dù không phải những gì tôi muốn:

  • --delimiters="\n" → dòng mới
  • --delimiters="\0" → không có gì ở giữa
  • --delimiters="\t"TAB, mặc định. Tuyệt quá.

Câu trả lời:


17

Để có giữa các abctập tin1 và tập tin 2, bạn có thể làm:

paste -d abc file1 /dev/null /dev/null file2

Hoặc là:

paste -d abc file1 - - file2 < /dev/null

Nếu bạn muốn hai tab:

paste file1 /dev/null file2

" Sử dụng /dev/nullđể tạo hai cột trong xử lý văn bản " hoạt động (bên cạnh: đây là kiến ​​thức phổ biến tôi đã bỏ lỡ cho đến nay và nếu không: bạn đã lấy thông tin này từ đâu?)
erch

1
@ Chirp.NotLuke. /dev/nullhoạt động như một tập tin rỗng khi đọc, vì vậy bạn dán file1, và tập tin rỗng, và tập tin rỗng, file2 có dải phân cách là, lần lượt, a, bc. Chi tiết về cách làm -dviệc trong pastetrang người đàn ông.
Stéphane Chazelas

@ StéphaneChazelas bạn cũng có thể thêm pr -mts'abc' file1 file2thay thế?
Sundeep

4

Đó là bởi vì bạn chỉ cung cấp cho nó hai tệp để tham gia, mỗi ký tự của chuỗi phân cách được sử dụng giữa mỗi lần nối dòng từ mỗi tệp đầu vào.

ví dụ

file1 line1 DELIMCHAR0 file2 line1 DELIMECHAR1 file3 line1 ...
file1 line2 DELIMCHAR0 file2 line2 DELIMECHAR1 file3 line2 ...
...

2

Trên các hệ thống BSD (không phải Linux theo hiểu biết của tôi), có lamtiện ích (như trong phần mềm laminate,) nhanh hơn và ngắn hơn giải pháp trên:

lam file1 -s delimiter file2
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.