Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用shell/awk仅打印一次相同的连续行_Shell_Awk - Fatal编程技术网

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

使用shell/awk仅打印一次相同的连续行,shell,awk,Shell,Awk,我的意见如下: Sep 9 09:22:11 Hello Hello Sep 9 10:23:11 Hello Hello Hello Sep 10 11:23:11 我希望输出如下:(相同的连续行仅替换为一行) 谁能帮我用shell或awk快速解决这个问题 使用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

我的意见如下:

Sep 9 09:22:11
Hello
Hello
Sep 9 10:23:11
Hello
Hello
Hello
Sep 10 11:23:11
我希望输出如下:(相同的连续行仅替换为一行)


谁能帮我用shell或awk快速解决这个问题

使用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

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

uniq File
使用示例输入,例如:

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

虽然它的名字可能意味着uniq与唯一的行有关,但它不是:它查找相邻的重复行,并在默认情况下删除重复行。

只是因为您也要求shell,尽管给出的答案都是更好的解决方案-

last=''
while read line
do if [[ "$line" -eq "$last" ]]
   then continue
   else echo "$line"
        last="$line"
   fi
done < infile
last=''
读行时
如果[[“$line”-eq“$last”]]
然后继续
else回显“$line”
最后一行“$line”
fi
完成<填充

这是简单、清晰的,并且可能比
awk
uniq
慢。您是对的。我认为该命令不会查找相邻的重复行。实际上,它工作得很好。非常感谢,我很高兴知道它成功了,
last=''
while read line
do if [[ "$line" -eq "$last" ]]
   then continue
   else echo "$line"
        last="$line"
   fi
done < infile