`
butterflymacro
  • 浏览: 58648 次
  • 性别: Icon_minigender_1
  • 来自: 山东
社区版块
存档分类
最新评论

sed与awk去除重复行

阅读更多

1 如果仅仅是删除内容完全一样重复行 

则可以使用sort先进行排序 然后使用 uniq进行删除重复数据即可

例如  CUST.TXT

130000006800,17,151,01,250100
130000006800,17,151,01,250101
1300001077,17,151,01,256600
1300002764,17,151,01,256600
1300002764,17,151,01,256630
1300003690,17,151,01,256600
1300001077,17,151,01,256600
1300004771,17,151,01256600
1300006064,17,151,01,251900
130000693300,17,151,01370102690715295
1300013082,17,151,01,51700

 

 第3行与第7行完全相同

 第一步:sort 进行排序

第二部: uniq 去除重复(必须先进行排序,否则uniq无法去除重复 uniq 是比较前后两行的数据,如果相邻两行数据不同则认为数据不同)

 

sort CUST.TXT | uniq > Target.TXT

 

 查看Target.TXT

 

130000006800,17,151,01,250100
130000006800,17,151,01,250101
1300001077,17,151,01,256600
1300002764,17,151,01,256600
1300002764,17,151,01,256630
1300003690,17,151,01,256600
1300004771,17,151,01256600
1300006064,17,151,01,251900
130000693300,17,151,01370102690715295
1300013082,17,151,01,51700

 发现 1300001077,17,151,01,256600 这条记录只有一条了

2 根据指定列进行去除重复行

 这里的重复是指如果两行的某一列数据相同,则认为是重复数据

例如第1行与第2行数据根据域分隔符","分割的第一列(CUST_ID)

第4行与第5行数据也是CUST_ID 相同 现在我们如何去除列相同的重复项

第一步: sort 进行排序

第二步: 用awk对相邻两行数据进行比较如果第一列的数据相同则去除重复行(保留第一个相同的行,)

 这里的去除重复行 并不是真正的删除重复行而是 利用unix shell 管道 对重复行的不进行重定向输出

 

sort -t, -k1 CUST.TXT | awk -F, '
{
$1 == CUST_ID {

}
$1 != CUST_ID {
  CUST_ID = $1;
  print $0;
}' > Target.TXT

 运行结果如下:

 

130000006800,17,151,01,250100
1300001077,17,151,01,256600
1300002764,17,151,01,256600
1300003690,17,151,01,256600
1300004771,17,151,01256600
1300006064,17,151,01,251900
130000693300,17,151,01370102690715295
1300013082,17,151,01,51700

 语法解释:

  sort -t, -k1   

 -t,   指定文件记录域分隔符为","  

 -k1  是指根据第1列进行排序

 

 awk -F, ' {

 $1 == CUST_ID {

 }

 $1 != CUST_ID {

  CUST_ID = $1;

  print $0;

 } ' > Target.TXT

 

 -F, 指定域分隔符为","

 $1 == CUST_ID 判断 第一列是否与变量 CUST_ID 相等  (不必要担心 CUST_ID变量的值 在初始化时 awk 为 CUST_ID 赋值 为"")

 如果相等什么多不做

$1 != CUST_ID { CUST_ID = $1 ;print $0;}   如果 一列不等于 CUST_ID 变量的值  将 $1 赋值为 CUST_ID

然后打印 这行数据 ,然后进行下一行  比较 下一行数据与上一行数据的CUST_ID 是否相等 相等 什么都不敢 也就是说

不打印着一行 如果不相等则打印着一行 从而起到去除重复数据的作用

 

分享到:
评论

相关推荐

    shell脚本,删除文本中的字符

    经过排序后,所有相同的行都在相邻,因此unqi可以正常删除重复行。  第二,用sort+awk命令,注意,单纯awk同样不行,原因同上。 shell> sort -k2n file | awk '{if ($0!=line) print;line=$0}'  当然,自己把...

    sixarm_unix_shell_scripts:SixArm.com»Unix»sh,bash等命令行程序的shell脚本

    :从文件中删除重复的,连续的行(模拟“ uniq”)。 :从文件中删除重复的,非连续的行。 :删除前导和尾随空格(空格和制表符)。 :删除文件顶部的所有前导空白行。 :删除前导的空格(空格和制表符)。 :删除...

    LINUX与UNIX_Shell编程指南(上)

    12.1.3 去除重复出现的字符 120 12.1.4 删除空行 120 12.1.5 大写到小写 121 12.1.6 小写到大写 121 12.1.7 删除指定字符 121 12.1.8 转换控制字符 122 12.1.9 快速转换 122 12.1.10 匹配多于一个字符 123 12.2 小结...

    Linux与unix shell编程指南(1-16)

    12.1.3 去除重复出现的字符 120 12.1.4 删除空行 120 12.1.5 大写到小写 121 12.1.6 小写到大写 121 12.1.7 删除指定字符 121 12.1.8 转换控制字符 122 12.1.9 快速转换 122 12.1.10 匹配多于一个字符 123 12.2 小结...

    Linux与unix shell编程指南

    12.1.3 去除重复出现的字符 120 12.1.4 删除空行 120 12.1.5 大写到小写 121 12.1.6 小写到大写 121 12.1.7 删除指定字符 121 12.1.8 转换控制字符 122 12.1.9 快速转换 122 12.1.10 匹配多于一个字符 123 12.2 小结...

    LINUX与UNIX SHELL编程指南(很全)

    12.1.3 去除重复出现的字符 120 12.1.4 删除空行 120 12.1.5 大写到小写 121 12.1.6 小写到大写 121 12.1.7 删除指定字符 121 12.1.8 转换控制字符 122 12.1.9 快速转换 122 12.1.10 匹配多于一个字符 123 12.2 小结...

    LINUX 与 UNIX SHELL编程指南

    12.1.3 去除重复出现的字符 120 12.1.4 删除空行 120 12.1.5 大写到小写 121 12.1.6 小写到大写 121 12.1.7 删除指定字符 121 12.1.8 转换控制字符 122 12.1.9 快速转换 122 12.1.10 匹配多于一个字符 123 ...

    Linux与Unix Shell编程指南(PDF格式,共30章)

    12.1.3 去除重复出现的字符 120 12.1.4 删除空行 120 12.1.5 大写到小写 121 12.1.6 小写到大写 121 12.1.7 删除指定字符 121 12.1.8 转换控制字符 122 12.1.9 快速转换 122 12.1.10 匹配多于一个字符 123 12.2 小结...

    LINUX与UNIX_SHELL编程指南1

    tr用法 119 12.1 关于tr 119 12.1.1 字符范围 119 12.1.2 保存输出 120 12.1.3 去除重复出现的字符 120 12.1.4 删除空行 120 12.1.5 大写到小写 121 12.1.6 小写到大写 121 12.1.7 删除指定...

    LINUX与UNIX SHELL编程指南

    12.1.3 去除重复出现的字符 120 12.1.4 删除空行 120 12.1.5 大写到小写 121 12.1.6 小写到大写 121 12.1.7 删除指定字符 121 12.1.8 转换控制字符 122 12.1.9 快速转换 122 12.1.10 匹配多于一个字符 123 12.2 小结...

    linux与unix shell编程指南part2

    12.1.3 去除重复出现的字符 120 12.1.4 删除空行 120 12.1.5 大写到小写 121 12.1.6 小写到大写 121 12.1.7 删除指定字符 121 12.1.8 转换控制字符 122 12.1.9 快速转换 122 12.1.10 匹配多于一个字符 123 12.2 小结...

    linux与unix shell编程指南.rar

    12.1.3 去除重复出现的字符 120 12.1.4 删除空行 120 12.1.5 大写到小写 121 12.1.6 小写到大写 121 12.1.7 删除指定字符 121 12.1.8 转换控制字符 122 12.1.9 快速转换 122 12.1.10 匹配多于一个字符 123 12.2 小结...

    linux与unix shell编程指南

    12.1.3 去除重复出现的字符 120 12.1.4 删除空行 120 12.1.5 大写到小写 121 12.1.6 小写到大写 121 12.1.7 删除指定字符 121 12.1.8 转换控制字符 122 12.1.9 快速转换 122 12.1.10 匹配多于一个字符 123 12.2 小结...

    LINUX与UNIX SHELL编程指南 高清PDF

    12.1.3 去除重复出现的字符 120 12.1.4 删除空行 120 12.1.5 大写到小写 121 12.1.6 小写到大写 121 12.1.7 删除指定字符 121 12.1.8 转换控制字符 122 12.1.9 快速转换 122 12.1.10 匹配多于一个字符 123 12.2 小结...

    LINUX与UNIX SHELL编程指南.rar

    12.1.3 去除重复出现的字符 120 12.1.4 删除空行 120 12.1.5 大写到小写 121 12.1.6 小写到大写 121 12.1.7 删除指定字符 121 12.1.8 转换控制字符 122 12.1.9 快速转换 122 12.1.10 匹配多于一个字符 123 12.2 小结...

Global site tag (gtag.js) - Google Analytics