利用赋值去重

data

http://www.sina.com.cn

http://www.sina.com.cn

################

http://www.163.com.cn

http://www.163.com.cn

################

http://www.163.com

http://www.163.com

################

 

期望输出:

http://www.sina.com.cn
################
http://www.163.com.cn
################
http://www.163.com
################

 

脚本:

# 方法一:利用sed去掉空行,再使用awk筛选相同的行
sed '/^$/d' data | awk 'v!=$0;{v=$0}'

# 方法二:NF作为pattern时可以判断该行是否为空行的条件
awk '$0!=v&&NF;NF{v=$0}' data

# 或者
awk 'NF&&$0!=i{print;i=$0}' data
View Code

 

awk '$0!=v&&NF;NF{v=$0}' data 
解析过程:  
第一行,v=0或null,NF=1(为真),"$0!=v&&NF"条件为真,这里没有{action},默认打印该行;分号后面的NF也为真,把$0赋值给v=$0
第二行,v=1,NF为空,"$0!=v&&NF"条件为假,不满足条件,无任何动作;NF也为假,v保留值$0
第三行,v=NF,不执行打印,NF为真,把第3行的内容赋值给v,v值和第一行内容一样
以此类推,执行到#行,"$0!=v&&NF"条件为真,打印该行,并且把该行的值赋给v。。。。
View Code

 

posted @ 2020-05-29 21:31  bigtree2pingping  阅读(127)  评论(0编辑  收藏  举报