我有如下输入:
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解决这个问题?
答案 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
这比awk
或uniq
简单明了,速度可能慢。