代码用于从包含命令行历史记录的 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
语句按顺序打印所有行。