解释awk代码

解释awk代码

代码用于从包含命令行历史记录的 histroy.txt 文件中删除重复条目。

BEGIN{
      if (data[$0]++ == 0)
         lines[++count] = $0;
     }
END {
     for(i=1; i<count; i++)
         print lines[i];
    }

data代码中有什么以及为什么将其与 进行比较0

答案1

这是为了记住输入中的 uniq 行。

正如 Jeff Schaller 指出的那样,在块$0中未定义。BEGIN

更正确的代码应该是

{
      if (data[$0]++ == 0)
         lines[++count] = $0;
     }
END {
     for(i=1; i<count; i++)
         print lines[i];
    }

甚至

!data[$0]++ { lines[++count] = $0; }
END {
     for(i=1; i<count; i++)
         print lines[i];
    }

第一次出现的行将data[$0]等于 0,line[ ]并将接收该行。

测试后,data[$0]将被递增(++是后递增),并且对于具有相同内容的行,测试将评估为 false。

END语句按顺序打印所有行。

也可以看看awk '!a[$0]++' 是如何工作的?

相关内容