我正在使用awk
來格式化輸出文件中的輸入文件。我有幾種模式來填充變量(如示例中的「某種模式」)。這些變量在END
塊中以所需格式打印。輸出必須在那裏完成,因爲輸入文件中出現的順序不能保證,但輸出文件中的順序必須始終相同。awk:在END塊中捕獲`exit'
BEGIN {
FS = "=|,"
}
/some pattern/ {
if ($1 == 8) {
var = $1
} else {
# Incorrect field value
exit 1
}
}
END {
# Output the variables
print var
}
所以我的問題是模式中的exit
聲明。如果有一些錯誤並且調用了該命令,則應該根本沒有輸出或最多有一條錯誤消息。但正如gawk手冊(here)所述,如果exit
命令在模式塊中被調用,END
塊將至少執行。有沒有辦法趕上exit
這樣的:
if (!exit_invoked) {
print var
}
或一些其他的方式,以避免打印輸出在END
塊?
斯特凡
編輯:用於從shellter的解決方案。
謝謝,不要想到這個簡單的解決方案;)我會把它包裝在一個函數中,不要忘記'exit_invoked'集合。 Stefan – Stefan 2012-04-12 17:51:44
@Stefan:好主意。提醒一下,你有這個變量,你可能想要在BEGIN塊中設置,即'exit_invoked = 0'。有些人會抱怨說這是不必要的和多餘的。我不會自己做,但它是一個很好的自我記錄技術。 YRMV。祝你好運。 – shellter 2012-04-12 17:54:32
我會這樣做,因爲我不爲自己編寫'awk'程序。謝謝。 – Stefan 2012-04-12 17:59:16