Tôi có ldif sau:
dn: cn=Robert Smith,ou=people,dc=example,dc=com
objectclass: inetOrgPerson
cn: Robert Smith
cn: Robert J Smith
cn: bob smith
sn: smith
uid: rjsmith
userpassword: rJsmitH
carlicense: HISCAR 123
homephone: 555-111-2222
mail: r.smith@example.com
alias: rsmith@example.com
alias: bob.smith@example.com
description: nice hair
ou: Human Resources
dn: cn=John Doe,ou=people,dc=example,dc=com
objectclass: inetOrgPerson
cn: John Doe
cn: John Walker Doe
cn: Johnny
sn: Doe
uid: jdoe
userpassword: topsecret
carlicense: AKAHH 123
homephone: 123-458-362
mail: j.doe@example.com
alias: jdoe@example.com
alias: john.doe@example.com
description: cool guy
ou: Sales
Bây giờ tôi đang chạy một lệnh awk chống lại nó:
awk '/^mail:/ { mail = $2 }; {print mail };' ldif
Kết quả dự kiến sẽ là:
r.smith@example.com
j.doe@example.com
Kết quả thực tế là:
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
j.doe@example.com
j.doe@example.com
j.doe@example.com
j.doe@example.com
j.doe@example.com
Tôi không thực sự hiểu tại sao awk cho đầu ra này nhiều lần. Tôi đánh giá rất cao nếu ai đó có thể giải thích cho tôi vì tôi mới sử dụng awk và chưa sử dụng nó nhiều trước đây. Tôi đã tham khảo trang người đàn ông và Google, nhưng tôi đoán tôi đang tìm kiếm những thứ sai ở đó ...
EDIT: Tôi hiểu rằng awk xử lý các luồng văn bản theo dòng. Tôi đoán "bản in" của tôi chỉ đơn giản là in đầu ra thường xuyên như có các dòng trong tệp ldif của tôi. Nhưng làm thế nào tôi có thể ngăn awk làm điều đó? Tôi chỉ muốn in mỗi kết quả một lần ..