[英]How to suppress awk output when using FS?
當使用通過命令行傳遞的字段分隔符並在腳本中使用FS=":"
,我無法理解awk的行為差異。
我認為使用-F
來提供字段分隔符並在awk中使用FS
變量是一回事。
但如果我這樣做:
awk -F: '{}' /etc/passwd
由於空動作( {}
),它沒有按預期打印任何內容。 而且,如果我加上一個腳本:
#!/usr/bin/awk -f
{}
正如預期的那樣,沒有行輸出到輸出。
現在,如果我將字段分隔符放在腳本中,如下所示:
#!/usr/bin/awk -f
FS=":";
{}
它再次打印所有行!
所以,我想在腳本中禁止默認的打印操作,因為我將在操作中進行一些計算,然后在END
部分中打印結果。 如果不首先打印所有行,我該怎么辦呢?
FS=":";
這條線不符合你的想法。 這不是一個指令。 Awk不像大多數解釋語言一樣工作:文件不是指令列表。 在頂層,您有CONDITION ACTION
形式的項目,其中條件是表達式,該操作是包含語句(指令)的大括號分隔的塊。 對滿足條件的每條記錄(行)執行操作。 條件和操作都是可選的。
賦值是一個表達式,因此FS=":"
是一個表達式,並且沒有相應的操作。 省略該操作時,默認為“打印當前記錄”。 對於下一行的{}
,它是一個什么都不做的動作,沒有條件(這意味着“總是”); 什么都不寫也有同樣的效果。
要在腳本啟動時執行代碼,您需要一個BEGIN
塊。 您可以將BEGIN
視為一個特殊條件,它在讀取任何輸入之前在腳本開頭匹配一次。
BEGIN {FS = ":"}
> /foo/ { } # match foo, do nothing - empty action
>
> /foo/ # match foo, print the record - omitted action
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.