很多人都知道awk!【$ 0】++‘文件可以刪除文本中的重復行,但不清楚如何刪除它們,因此這裏我將單獨分析該命令。
首先,我們需要知道這個命令隱含了壹個print $0。完整的命令如下:
Awk確定以下三種情況為“假”,所有其他情況為“真”:
數字0
空字符串““
未定義變量,對於未定義變量var,如果需要字符串運算,則將其轉換為空字符串“”,如果需要數學運算,則將其轉換為數字0。您還可以使用var““將其強制轉換為空字符串““,使用var+0將其強制轉換為數字0。
所以上面awk聲明的原則是判斷!壹個【$ 0】++值,如果該值為真,則打印當前行,如果該值為假,則自然不打印當前行。
開始分析!a【$ 0】++,但首先看看awk中運算符的優先級(從高到低):
這裏我們可以用壹個簡單的變量替換【$0】數組的值,這很容易理解:
我們知道a++運算符會在變量A用完之後遞增變量,因此盡管比率為++!高優先級,首先與變量A結合,但不會立即增加變量A的值,而是在!在a之後,自增變量a的值。通過例子理解:
現在是不是壹目了然了,然後將其代入前面的示例:
分析如下: