Linux: mèo với dấu phân cách giữa các tệp


28

Trong Linux nếu bạn gõ cat *, bạn sẽ nhận được một cái gì đó như thế này:

line1 từ file1
line2 từ file1
line1 từ file2
line1 từ file3
line2 từ file3
line3 từ file3

Những gì tôi muốn là hiển thị một dấu phân cách giữa các tập tin. Một cái gì đó như thế này:
line1 từ file1
line2 từ file1
XXXXXXXXXXXX
line1 từ file2
XXXXXXXXXXXX
line1 từ file3
line2 từ file3
line3 từ file3

Điều đó có dễ dàng với một lớp lót dễ gõ theo trái tim không?

Câu trả lời:


40

Nếu bạn không quá cầu kỳ về sự xuất hiện của dải phân cách:

tail -n +1 *

Điều đó thật tuyệt! Tôi ngạc nhiên khi lệnh của bạn khác với đuôi -n 1 *. Tôi không thể tìm thấy bất kỳ đề cập nào về ảnh hưởng của +1 (rathen than 1) trong trang man.
Daniele

1
tail -n Xhiển thị các dòng X cuối cùng. tail -n +Xbắt đầu ở dòng X bắt đầu từ 1 , nghĩa là nó hiển thị tất cả trừ các dòng đầu tiên (X-1).
Gilles 'SO- ngừng trở nên xấu xa'

Ah, bây giờ tôi có thể thấy điều đó trong trang người đàn ông. Tôi bỏ qua nó. Thật tuyệt, cảm ơn rất nhiều
Daniele

Các giải pháp tương tự có trong bài viết này: everythingsysadmin.com/2012/09/unorthodoxunix.html
TomOnTime

Xin lỗi vì nhận xét xấu, nhưng điều này thật tuyệt vời. Cảm ơn bạn, @Gilles
Mike D

17

cd /to/your/directory; for each in *; do cat $each; echo "XXXXXXXXXXX"; done


đánh bại tôi với nó :-)
Sirex

Tuy nhiên, giải pháp được cung cấp bởi Gilles là ngắn gọn ấn tượng!
Janne Pikkarainen

Ồ công trình tự hỏi. Đã giúp tôi ghép một thư mục JSON
Mayank Chandak

11
awk 'FNR==1 && NR!=1 {print "XXXXXXXXXXXX"}{print}' *

Hoặc là

awk 'FNR==1 {print "XXXXXX", FILENAME, "XXXXXX"}{print}' *

Hoặc là

awk 'FNR==1 {print "XXXXXX File no. " ++count, "XXXXXX"}{print}' *

Chỉ sử dụng Bash (không cat):

for file in *; do printf "$(<"$file")\nXXXXXXXXXXXX\n"; done

Chỉnh sửa:

Trong AWK 4:

awk 'BEGINFILE {print "XXXXXXXXXXXX"}{print}' *

Bạn có thể sử dụng bất kỳ dấu phân cách nào như các ví dụ trong các ví dụ khác trong câu trả lời này. Nếu bạn muốn dấu phân cách ở cuối mỗi tệp, hãy đổi BEGINFILEthành ENDFILE. Nó vẫn có thể xuất hiện ở phần đầu của tập lệnh vì nó là một điều kiện (chứ không phải ngụ ý thứ tự thực thi) ..


2
+1 cho awk! Tôi thề là nó có thể làm bất cứ điều gì ...
brad
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.