[leo@leo ~]$ cat removerepetive

1111

2222

3333

1111

3333

2222

4444

1111

2222

3333

4444

2222

 

 

一。 UNIQ 用法

补充一下uniq的用法

1. 无选项参数: 将源文件中的连续多相同行简化为一行,然后输出全文
2. -d        : 将源文件中的连续多相同行简化为一行,然后输出这些行
2. -u        : 排除源文件中的连续多相同行,然后输出其他行


二。 AWK

 

[leo@leo ~]$ cat removerepetive | awk '!i[$1]++'

1111

2222

3333

4444


对于awk '!i[$1]++',需要了解3个知识点

 

1、awk数组知识

2、awk的基本命令格式 awk 'pattern{action}'

省略action时,默认action是{print},如awk '1'就是awk '1{print}'

3、var++的形式:先读取var变量值,再对var值+1

以上述数据为例,对于

 

 

awk '!i[$1]++'
awk处理第一行时: 先读取i[$1]值再自增,i[$1]即i[1]值为空(0),即为awk '!0',即为awk '1',即为awk '1{print}'
awk处理第二行时: 先读取i[$1]值再自增,i[$3]即a[1]值为1,即为awk '!1',即为awk '0',即为awk '0{print}'
.............
最后实现的效果就是对于$1是第一次出现的行进行打印,也就是去除$1重复的行 

最重要的awk '1' 为打印   awk '0' 为不打印,所以只有第一次出现的行才会大于0 。所以只会打印一次!!!