我有一个包含数千行文本的文本文件,其中包含域名列表,后跟域后面包含不同信息的句点(数字,空格,其他信息)
某些域可能包含超过1行的信息,之后会有不同的数字和信息,例如本示例中的域1和域
domain1.foo. 3600 ...
domain1.foo. 1800 ...
domain2.foo. 900 ...
domain3.foo. 60 ...
domain4.foo. 3600 ...
domain4.foo. 1200 ...
domain4.foo. 1200 ...
重复的列表只会是彼此之下的行(例如,涉及domain4的行可能是50,51,52行,但不会是50,60和400行。)
所以我要做的是创建使用sed删除包含每个域名的任何重复行,无论后面是什么 - 所以示例将成为
domain1.foo. 3600 ...
domain2.foo. 900 ...
domain3.foo. 60 ...
domain4.foo. 3600 ...
我只有正则表达式的基本知识,并希望得到一些帮助,如何解决这个问题。我设法将列表格式化,因此删除了标签和双空格,但我需要一点帮助。
答案 0 :(得分:2)
拯救:
#content {
padding:10px;
border:2px solid blue;
overflow:hidden;
display: flex; /* NEW */
flex-direction: column; /* NEW */
}
这可以通过将变量$ awk 'last != $1; {last = $1}'
domain1.foo. 3600 ...
domain2.foo. 900 ...
domain3.foo. 60 ...
domain4.foo. 3600 ...
设置为第一列的值来实现。仅当第一列与last
不相同时,才会打印当前行。
你也可以用sed来做,但你真的不应该这样做:
last
以上工作方法是将下一行读入模式空间,并检查每行中的第一列是否相同。
如果它们相同,则删除最后一行,然后脚本再次跳转到开头。
两列不同后,第一列打印,然后删除,第二行重复脚本。
sed ':s;N;/^\([^ ]*\) [^\n]*\n\1/{s/\n.*//;bs};P;D'
答案 1 :(得分:0)
andlcr's helpful awk
answer是可行的方法,特别是考虑到可移植(符合POSIX标准)并且使用可变长度域名。
在这个简单的案例中,
在行前缀中给出固定数量的字符。,
如果您的平台具有uniq
的 GNU 实现(请与
uniq --version
)
以下内容也适用:
uniq -w 12 file