【发布时间】:2020-06-27 15:26:17
【问题描述】:
需要编写一个脚本来处理标准输入并删除每个找到的重复行,直到标准输入结束。每个副本而且第一个选项的线性重复都会被删除,无论条目中是否有另一个或分散。标准输出仅显示没有重复条目的行(按收到的条目顺序)。
例如,我们有文件 test.txt 包含以下内容:
Whatever
You
Want
You
To
Whatever
Have
Here
输出应该删除所有重复的行,并且行的顺序与输入相同,如下所示:
Want
To
Have
Here
请注意,我们不知道文件包含什么(这只是一个示例)。我测试了许多命令,但找不到一个有效且符合要求的命令。
IMPORTANT NOTE : I need all occurences of the line to be deleted,
not only all of them after the first one
【问题讨论】:
-
您的示例输入包含因空格数不同而不同的行(例如:
You和You)。为什么输出将它们视为相同? -
对于“小”输入中第一次出现相同行:
| awk '!seen[$0]++' -
对于 large 输入:
| cat -n | sort -k2 | uniq -f1 | sort -n -k1,1 | sed '^[ 0-9]*\t//' -
对于 huge(永无止境?)输入:在数据库中存储行并执行查找
-
sed 命令在我输入时出错:
| cat -n | sort -k2 -s | uniq -f1 | sort -n -k1,1 | sed 's/^[ 0-9]*\t//'
标签: linux shell ubuntu terminal