我可以使用什么 sed/awk 命令?只是sort -u
将删除所有实例
输入:
abc
abc
def
abc
abc
def
预期输出:
abc
def
abc
def
答案1
这就是uniq
标准命令的用途。
uniq your-file
请注意,某些uniq
实现(例如 GNU)uniq
将为您提供一系列行中的第一行排序相同(其中strcoll()
返回 0)而不是字节与字节相同(其中memcmp()
orstrcmp()
返回 0)。要强制进行字节到字节的比较(无论uniq
实现如何),您可以强制使用以下语言环境C
:
LC_ALL=C uniq your-file
答案2
Vim 可以很好地实现这一点:
:g/\v^(.*\n)\1/d
或者,如果您更愿意使用 vim 作为命令行工具,您可以这样做
vim file -c "g/\v^(.*\n)\1/d" -c "wq"
这样你以后就不必费力退出 vim ;)
解释:
:g/
在与此正则表达式匹配的所有行上...
\v^(.*\n)\1
任何一行后面都有其自身...
/d
跑过delete 命令(删除当前行)。就是-c "wq"
保存修改并退出。
答案3
这是一个awk
等价的:
awk 'p!=$0; {p=$0}' file
p!=$0;
如果与前一行不同,则;
此处需要打印行。
{p=$0}
设置p
为当前行。
如果第一行为空,则一个明显的错误是缺少第一行。一个简单的修复方法是:
awk 'NR==1 || p!=$0; {p=$0}' file