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 awk
cho 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 awk
lệ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 venkat
và venkat3
trong đầu ra?
Nếu tôi sử dụng printf
thay vì print
trong tôi awk
, tôi nhận được venkatvenkat3
như 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 $1
cộ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 awk
giải pháp của Stephane. Có phải nó đang làm điều tương tự mà tôi đã đề cập?
awk
khô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ưdoglion
và không chỉdog_lion
.