Linux 删除任何重复行并保持原始顺序的脚本
需要编写一个脚本来处理标准输入,并删除在标准输入结束前发现的每个重复行。将删除线性副本的每个副本以及第一个选项,而不管条目中是否有其他副本或分散的副本。标准输出仅显示没有重复条目的行(按收到的条目顺序)。Linux 删除任何重复行并保持原始顺序的脚本,linux,shell,ubuntu,terminal,Linux,Shell,Ubuntu,Terminal,需要编写一个脚本来处理标准输入,并删除在标准输入结束前发现的每个重复行。将删除线性副本的每个副本以及第一个选项,而不管条目中是否有其他副本或分散的副本。标准输出仅显示没有重复条目的行(按收到的条目顺序)。 例如,我们的文件test.txt包含以下内容: Whatever You Want You To Whatever Have Here 输出应该删除所有重复的行,行的顺序与输入相同,如下所示: Want To Have Here 注意,我们不知道文件包含什么(这只是一个示例)。我测试了许多
例如,我们的文件
test.txt
包含以下内容:
Whatever
You
Want
You
To
Whatever
Have
Here
输出应该删除所有重复的行,行的顺序与输入相同,如下所示:
Want
To
Have
Here
注意,我们不知道文件包含什么(这只是一个示例)。我测试了许多命令,但找不到一个有效且符合要求的命令
重要提示:我需要删除该行出现的所有内容
not only all of them after the first one
我不知道“每个副本以及线性副本的第一个选项都将被删除”是什么意思,但我认为您只是在寻找:
awk '!a[$0]++'
或许:
awk '!a[$1]++'
例如:
示例输入包含按空格数不同的行(例如:
You
和You
)。为什么输出将它们视为相同的?对于“小”输入中第一次出现的相同行:| awk'!查看[$0]+'
获取大输入:|cat-n | sort-k2 | uniq-f1 | sort-n-k1,1 | sed'^[0-9]*\t/'
获取大输入:在数据库中存储行并执行查找sed命令在我输入时被损坏:| cat-n | sort-k2-s | uniq-f1 | sort-n-k1/'s^[1240]*\t/'
我需要所有重复的行deleted@JonBjatBun我不明白你的评论。第一种解决方案删除所有重复的行。第二种解决方案删除所有只复制第一列的行。
$ cat input
Whatever
You
Want
Whatever 1
You
To
Whatever 1
Have
Here
$ awk '!a[$0]++' input
Whatever
You
Want
Whatever 1
To
Have
Here
$ awk '!a[$1]++' input
Whatever
You
Want
To
Have
Here