Mẫu tìm kiếm đầu vào của người dùng trong một tệp trong Unix bằng awk


0

Tôi đang cố gắng viết kịch bản awk để tìm kiếm một mẫu được cung cấp bởi người dùng, trong một tệp.
Mã của tôi trông như thế này:
awk 'BEGIN{printf "Enter : ";getline input<"/dev/tty"} /'"$input"'/ {print}' <abc.txt
Những gì tôi nhận được như một đầu ra là toàn bộ tệp. Ai đó có thể giúp tôi tìm nơi tôi đang đi sai không?

Câu trả lời:


1

Những gì bạn làm là: bạn đọc mẫu từ tty, bạn đặt nó vào một biến awk (không phải của shell) được gọi là đầu vào, sau đó bạn khớp với dòng nội dung của biến shell được gọi là đầu vào. (Chỉ cần nhìn vào các trích dẫn và cố gắng tự giải thích mã.) Biến đó trống để awk khớp với dòng so với //, một biểu thức chính quy rỗng luôn khớp.

Tất cả bạn cần làm là

$0 ~ input { print }

hoặc là

match( $0, input) { print }

Trên thực tế "{print}" có thể được bỏ qua vì hành động mặc định cho mọi vấn đề phù hợp là in bản ghi.


Cảm ơn @ Sándor đã phân loại lỗi. Tôi đã kéo tóc của tôi ra cho điều này. :)
học1

Rất hoan nghênh. Tôi có thể tưởng tượng. Đôi khi nó trích dẫn làm cho ngay cả các trường hợp đơn giản trông khó khăn hơn, lần khác nó thực sự làm cho chúng khó khăn hơn.
Gombai Sándor
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.