Tôi đang sử dụng awk
để định dạng tệp đầu vào trong tệp đầu ra. Tôi có một số mẫu để điền vào các biến (như "một số mẫu" trong ví dụ). Các biến này được in theo định dạng bắt buộc trong khối END
. Đầu ra phải được thực hiện ở đó vì thứ tự xuất hiện trong tệp đầu vào không được đảm bảo, nhưng thứ tự trong tệp đầu ra phải luôn giống nhau.awk: bắt `thoát 'trong khối END
BEGIN {
FS = "=|,"
}
/some pattern/ {
if ($1 == 8) {
var = $1
} else {
# Incorrect field value
exit 1
}
}
END {
# Output the variables
print var
}
Vì vậy, vấn đề của tôi là tuyên bố exit
trong mẫu. Nếu có một số lỗi và lệnh này được gọi, sẽ không có đầu ra nào cả hoặc có nhiều nhất là một thông báo lỗi. Nhưng khi hướng dẫn sử dụng gawk (here) cho biết, nếu lệnh exit
được gọi trong khối mẫu, khối END
sẽ được thực hiện ít nhất. Có cách nào để bắt exit
như:
if (!exit_invoked) {
print var
}
hoặc một số cách khác để tránh in sản lượng trong khối END
?
Stefan
chỉnh sửa: sử dụng các giải pháp từ Shellter.
Cảm ơn, không nghĩ về giải pháp đơn giản này;) Tôi sẽ gói trong chức năng này để không quên tập hợp 'exit_invoked'. Stefan – Stefan
@Stefan: Ý tưởng hay. Lưu ý rằng bạn có biến đó trong khi chơi, bạn có thể muốn đặt trong khối BEGIN, tức là 'exit_invoked = 0'. Một số sẽ phàn nàn rằng nó là không cần thiết và dư thừa. Tôi sẽ không làm điều đó bản thân mình, nhưng nó là một techinque tự tài liệu tốt. YRMV. Chúc may mắn. – shellter
Tôi sẽ làm điều này vì tôi không viết chương trình 'awk' cho bản thân mình. Cảm ơn. – Stefan