从文件中删除重复的相邻行

从文件中删除重复的相邻行

假设我们有这样的文件:

foo1
bar
foo2
foo2
bar
bar
bar
foo3

我希望它减少为:

foo1
bar
foo2
bar
foo3

基本上只有在相邻的情况下才会删除重复项...我开始编写一个 bash 函数,但意识到我不知道如何做到这一点:

remove_duplicate_adjacent_lines(){
   prev='';
   while read line; do
     if test "$line" != "$prev"; then
        prev="$line";
        echo "$line"
     fi
   done;
}

但问题是prev不在 while 循环的范围内 - 有没有办法用 bash 以某种方式做到这一点?

答案1

这正是该uniq实用程序的用途:

$ uniq <File
foo1
bar
foo2
bar
foo3

bash 历史记录就是一个很好的例子:

history | uniq

由于行号的原因,上面的代码不起作用,但这会:

cat ~/.bash_history | uniq

将删除重复的相邻命令

man uniq

筛选相邻的匹配线从 INPUT(或标准输入)写入 OUTPUT(或标准输出)。如果没有选项,匹配的行将合并到第一次出现的位置。 [已添加强调]

相关内容