使用shell / awk仅打印相同的连续行一次

时间:2016-09-11 16:48:11

标签: shell awk

我有如下输入:

Sep 9 09:22:11
Hello
Hello
Sep 9 10:23:11
Hello
Hello
Hello
Sep 10 11:23:11

我期望输出如下:(相同的连续行仅被一行代替)

Sep 9 09:22:11
Hello
Sep 9 10:23:11
Hello
Sep 10 11:23:11

有没有人能帮助我快速使用shell或awk解决这个问题?

3 个答案:

答案 0 :(得分:1)

使用awk你可以这样做:

awk '$0 != prev; {prev=$0}' file

Sep 9 09:22:11
Hello
Sep 9 10:23:11
Hello
Sep 10 11:23:11

命令分手:

$0 != prev;   # if previous line is not same as current then print it
{prev=$0}     # store current line in a variable called prev

答案 1 :(得分:1)

要删除重复的行,请使用uniq

uniq File

使用您的样本输入,例如:

$ uniq File
Sep 9 09:22:11
Hello
Sep 9 10:23:11
Hello
Sep 10 11:23:11

虽然它的名称可能暗示uniq关注自身的唯一行,但它不会:它查找相邻的重复行,默认情况下会删除重复行。

答案 2 :(得分:0)

仅仅因为你也要求shell,虽然给出的答案都是更好的解决方案 -

last=''
while read line
do if [[ "$line" -eq "$last" ]]
   then continue
   else echo "$line"
        last="$line"
   fi
done < infile

这比awkuniq简单明了,速度可能慢。