簡體   English   中英

Awk中的Ignorecase創建意外輸出

[英]Ignorecase in awk creates unintentional output

我剛開始編寫腳本(2個月),在wk中使用Ignorecase遇到了一個我不理解的問題。 我在使用sed時已經有解決方案,但我仍然想知道為什么發生以下情況以及如何避免這種情況。

從這條線;

echo foo.BAZ.bar | awk 'IGNORECASE = 1;{gsub(/'.baz.'/,"'.'")};{print}'

我得到了輸出,

foo.BAZ.bar foo.bar

但我只希望輸出foo.bar 可以通過刪除IGNORECASE = 1;來避免上述行為IGNORECASE = 1; 從行開始,但這意味着.BAZ. ,當然不會從foo.BAZ.bar刪除。 這種行為對我來說似乎很奇怪,非常不可取!

感謝您的任何輸入,不勝感激:)

文斯

kent$  echo foo.BAZ.bar|awk -v IGNORECASE=1 '{gsub(/.baz./,".")}7'      
foo.bar

您需要做:

echo foo.BAZ.bar | awk 'BEGIN{IGNORECASE = 1}{gsub(/[.]baz[.]/,".")}1'

當你明確表示; IGNORECASE語句之后,您的行將按任何修改之前的原樣打印,因為該操作返回的是true,而awk打印該行。 一旦gsub修改了該行,顯式print就會打印修改后的行。

另外,請注意,字符串保留在gsub函數中。

更新:如Ed的評論所述,使用先前的解決方案將針對每一行測試IGNORECASE變量。 將其放在BEGIN部分中會分配一次,並將其用於整個文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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