如何根据子字符串过滤唯一的行?

如何根据子字符串过滤唯一的行?

如果我在文件中有一组 URL,例如:

http://example.com/do?foo=bar&etc=123

http://example.com/do?etc=456&foo=bar

我想过滤掉这些内容,以便“foo”参数的每个唯一值都只有一个 URL。URL 的其余部分并不重要,对我来说唯一重要的是不要有两行或更多行具有相同的“foo”值。

答案1

由于您使用 awk 标记了问题,我想您在某种程度上对它很熟悉,例如,您知道可以在命令行(和其他地方)将字段分隔符设置为一组字符,例如-F'[?&]'

此外,您可能还知道NF变量包含当前输入记录(行)中解析的字段数,你可以从 2 循环到NF使用 C 风格为了(...;...;...)找到foo=xxx场地。

这里能为你提供帮助的最好的东西是 awk 的关联数组(在其他上下文中称为字典、哈希或映射),你可以在其中将值存储在索引中,并检查值是否已作为索引存在于数组中,并据此做出决定。例如:

if ( ! (value in myarray) ) {
   print thelinevalueisfrom
   myarray[value] = 1 # just to register we have seen value for later usage
}

基本上,这就是您所需要的全部内容。

相关内容