Câu trả lời:
Bạn có thể thử
grep pattern file | tail -1
hoặc là
tac file | grep pattern | head -1
hoặc là
tac file | grep -m1 pattern
grep -n
) trong tệp thực tế, tôi nghĩ rằng tac
cần phải tránh khá nhiều, trừ khi tôi muốn thực hiện một số phép trừ wc -l
. Nếu không tac
với grep -m1
làm cho rất nhiều ý nghĩa.
grep
sẽ ngừng hoạt động sau trận đấu đầu tiên. không có -m 1
, grep
trước tiên sẽ tìm thấy tất cả các mẫu phù hợp trong tệp , sau đó head
sẽ chỉ hiển thị mẫu đầu tiên - kém hiệu quả hơn nhiều. Dennis, xin vui lòng xem xét đăng bài này trong một câu trả lời riêng!
Dành cho ai đó làm việc với các tệp văn bản lớn trong Unix / Linux / Mac / Cygwin. Nếu bạn sử dụng Windows, hãy kiểm tra điều này về các công cụ Linux trong Windows: https://stackoverflow.com/questions35319738/what-is-the-best-way-to-use-linux-utilities-under-windows .
Người ta có thể làm theo quy trình công việc này để có hiệu suất tốt:
zq
từ gói.Trích dẫn từ github readme của nó:
Tạo một chỉ mục
zindex cần được cho biết phần nào của mỗi dòng tạo thành chỉ mục. Điều này có thể được thực hiện bằng một biểu thức chính quy, theo trường hoặc bằng cách đặt từng dòng thông qua một chương trình bên ngoài.
Theo mặc định, zindex tạo một chỉ mục của file.gz.zindex khi được yêu cầu lập chỉ mục file.gz.
Thí dụ:
tạo một chỉ mục trên các dòng khớp với một biểu thức chính quy số. Nhóm chụp cho biết phần được lập chỉ mục và các tùy chọn hiển thị mỗi dòng có một chỉ mục số duy nhất.
$ zindex file.gz --regex 'id:([0-9]+)' --numeric --unique
Ví dụ: tạo một chỉ mục trên trường thứ hai của tệp CSV:
$ zindex file.gz --delimiter , --field 2
Thí dụ:
tạo một chỉ mục trên trường JSON orderId.id trong bất kỳ mục nào trong mảng hành động của tài liệu gốc (yêu cầu jq). Truy vấn jq tạo ra một mảng của tất cả các orderId.ids, sau đó kết hợp chúng với một khoảng trắng để đảm bảo mỗi dòng riêng lẻ được chuyển đến jq tạo một dòng đầu ra duy nhất, với nhiều kết quả được phân tách bằng khoảng trắng (là dấu phân cách mặc định).
$ zindex file.gz --pipe "jq --raw-output --unbuffered '[.actions[].orderId.id] | join(\" \")'"
Truy vấn chỉ mục
Chương trình zq được sử dụng để truy vấn một chỉ mục. Nó được đặt tên của tệp nén và danh sách các truy vấn. Ví dụ:
$ zq file.gz 1023 4443 554
Cũng có thể xuất theo số dòng, vì vậy để in các dòng 1 và 1000 từ một tệp:
$ zq file.gz --line 1 1000
Tôi luôn luôn sử dụng mèo (nhưng điều này làm cho nó dài hơn một chút): cat file | grep pattern | tail -1
Tôi sẽ đổ lỗi cho giáo viên khóa học quản trị linux của tôi ở trường đại học yêu mèo :))))
- Bạn không cần phải gửi một tập tin trước khi gre nó. grep pattern file | tail -1
và hiệu quả hơn, quá.
cat
tập tin và dẫn nó đến grep
. Bạn có thể đã grep
tìm kiếm tệp trực tiếp qua grep pattern file
(và sau đó sử dụng tail
để trả về kết quả cuối cùng), như trong câu trả lời của Cakemox.
tac file | grep -m 1 pattern