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


-1

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

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

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

我想将其过滤掉,以便“ foo”参数的每个唯一值只有一个网址。URL的其余部分无关紧要,对我来说唯一重要的是,我没有两行或更多行具有相同的'foo'值。


1
你尝试了什么?你哪里失败了?这不是一个脚本编写站点,我们仅建议人们如何纠正他们遇到的错误。
MariusMatutiae '16

Answers:


0

由于您使用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
}

基本上,这就是您所需要的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.