Tôi đã cố gắng tìm ra một giải pháp cho câu hỏi này . Tôi muốn sử dụng awkcho giải pháp.
Tập tin đầu vào của tôi là một cái gì đó như dưới đây.
-bash-3.2$ cat file
ramesh
ramesh_venkat
ramesh3_venkat3
ramesh4
ramesh5
venkat
venkat3
venkat4
Tôi đã sử dụng awklệnh để trích xuất các giá trị thứ hai sau _như dưới đây.
awk -F "_" '{print $2}' file
Tuy nhiên, mặc dù lệnh trên in các giá trị chính xác, tôi nhận được các dòng trống trong đầu ra của mình. Tôi có 2 câu hỏi.
Câu hỏi 1
Làm cách nào tôi có thể xóa các dòng trống trong đầu ra để tôi chỉ nhận venkatvà venkat3trong đầu ra?
Nếu tôi sử dụng printfthay vì printtrong tôi awk, tôi nhận được venkatvenkat3như là đầu ra mà tôi không muốn đạt được. Tôi muốn đầu ra như,
venkat
venkat3
Câu hỏi 2
Sử dụng các giá trị đó như một mảng kết hợp hoặc một cái gì đó, làm thế nào tôi có thể tìm thấy nếu các giá trị thực sự xảy ra trong $1cột?
Tôi muốn đạt được một cái gì đó như,
awk -F "_" '$2==1{print $1}' file
BIÊN TẬP
Tôi không nhận thấy awkgiải pháp của Stephane. Có phải nó đang làm điều tương tự mà tôi đã đề cập?
awkkhông làm điều tương tự. Cách tiếp cận của bạn giả định rằng một từ chỉ có thể được chứa trong một từ khác nếu nó được phân tách bằng_. Mặc dù điều đó đúng với ví dụ của OP, tất cả các câu trả lời được đăng cũng xử lý các trường hợp nhưdoglionvà không chỉdog_lion.