簡體   English   中英

如何在使用FS時抑制awk輸出?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM