Cha*_*har 3 bash sed duplicates
我有一个文本文件,其中的内容可能是重复的。下面是我的 txt 文件的简化表示。text表示一个独特的字符或单词或短语)。注意分隔符----------可能不存在。此外,文件的全部内容由 unicode 日文和中文字符组成。
已编辑
sometext1
sometext2
sometext3
aaaa
sometext4
aaaa
aaaa
bbbb
bbbb
cccc
dddd
eeee
ffff
gggg
----------
sometext5
eeee
ffff
gggg
sometext6
sometext7:cccc
sometext8:dddd
sometext9
sometext10
Run Code Online (Sandbox Code Playgroud)
我想要实现的是只保留最后一次出现重复的行,如下所示:
sometext1
sometext2
sometext3
sometext4
aaaa
bbbb
sometext5
eeee
ffff
gggg
sometext6
sometext7:cccc
sometext8:dddd
sometext9
sometext10
Run Code Online (Sandbox Code Playgroud)
我在网上找到的最接近的是如何使用 sed 仅删除文件中第一次出现的行,但这需要您知道要删除的匹配模式。编写标题时提供的建议主题使用 sed和最后一次出现的日期提供重复字符,但它们不起作用。
我正在使用带有 Sierra 的 Mac。我在 script.sh 文件中编写可执行命令以逐行执行命令。我正在使用sed和gsed作为我的主要流编辑器。
我不确定您的意图是否是保留行的原始顺序。如果是这种情况,您可以这样做:
export LC_ALL=en_US.utf8 # to handle unicode characters in file
nl -n rz -ba file | sort -k2,2 -t$'\t' | uniq -f1 | sort -k1,1 | cut -f2
Run Code Online (Sandbox Code Playgroud)
nl -n rz -ba file 向文件添加零填充行号sort -k2,2 -t'$\t'按nl第二个字段对输出进行排序(注意nl在行号后面放一个制表符)uniq -f1删除重复项,同时忽略行号字段 ( -f1)sort恢复行的原始顺序,删除重复项cut -f2 删除行号字段,将内容恢复为原始格式