`

sed与awk去除重复行

 
阅读更多

转 http://butterflymacro.iteye.com/blog/846540

 

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

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

例如  CUST.TXT

Txt代码  收藏代码
  1. 130000006800,17,151,01,250100  
  2. 130000006800,17,151,01,250101  
  3. 1300001077,17,151,01,256600  
  4. 1300002764,17,151,01,256600  
  5. 1300002764,17,151,01,256630  
  6. 1300003690,17,151,01,256600  
  7. 1300001077,17,151,01,256600  
  8. 1300004771,17,151,01256600  
  9. 1300006064,17,151,01,251900  
  10. 130000693300,17,151,01370102690715295  
  11. 1300013082,17,151,01,51700  

 

 第3行与第7行完全相同

 第一步:sort 进行排序

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

 

Shell代码  收藏代码
  1. sort CUST.TXT | uniq > Target.TXT  

 

 查看Target.TXT

 

Txt代码  收藏代码
  1. 130000006800,17,151,01,250100  
  2. 130000006800,17,151,01,250101  
  3. 1300001077,17,151,01,256600  
  4. 1300002764,17,151,01,256600  
  5. 1300002764,17,151,01,256630  
  6. 1300003690,17,151,01,256600  
  7. 1300004771,17,151,01256600  
  8. 1300006064,17,151,01,251900  
  9. 130000693300,17,151,01370102690715295  
  10. 1300013082,17,151,01,51700  

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

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

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

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

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

第一步: sort 进行排序

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

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

 

Shell代码  收藏代码
  1. sort -t, -k1 CUST.TXT | awk -F, '  
  2. {  
  3. $1 == CUST_ID {  
  4.   
  5. }  
  6. $1 != CUST_ID {  
  7.   CUST_ID = $1;  
  8.   print $0;  
  9. }' > Target.TXT  

 运行结果如下:

 

Txt代码  收藏代码
  1. 130000006800,17,151,01,250100  
  2. 1300001077,17,151,01,256600  
  3. 1300002764,17,151,01,256600  
  4. 1300003690,17,151,01,256600  
  5. 1300004771,17,151,01256600  
  6. 1300006064,17,151,01,251900  
  7. 130000693300,17,151,01370102690715295  
  8. 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 是否相等 相等 什么都不敢 也就是说

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

分享到:
评论

相关推荐

    Sed与Awk (中文版)

    **sed和awk工具的介绍与应用** sed和awk是广泛应用于UNIX系统中的两个文本处理工具。sed是流编辑器(stream editor)的缩写,而awk则是一种编程语言,得名于其三位开发者:Alfred Aho、Peter J. Weinberger和Brian ...

    sed和awk使用实例

    这两条命令都可以用于去除文件中的重复行,awk 的方法使用关联数组来实现,而 sort 命令使用 uniq 命令来实现。 三、其他实例 1. 筛选出 login_version 的值 awk -F: '$1~/login_version/{print $2}' a.txt sed -...

    sed和awk单行命令比较

    此命令首先限制每行长度不超过77个字符,然后去除重复的字符,使得总长度不超过79个字符。 - **awk**: ``` awk '{for(i=0;i($0)/2;i++)printf("");printf("%s\n",$0)}' ``` 通过循环在每行前添加足够的空格,...

    sed & awk英文版

    ### sed与awk:强大的文本处理工具 #### 一、引言与概述 本书《sed & awk》由Dale Dougherty与Arnold Robbins合著,共432页,出版于1997年3月。这是一部专为希望掌握sed与awk这两种Unix工具的读者而写的指南。sed...

    sed ,awk用法

    - 删除指定行:`sed '1d' temp.txt` 删除第一行,`sed '1,4d' temp.txt` 删除第一行到第四行。 - 替换文本:`sed 's/source/OKSTR/' temp.txt` 将"source"替换为"OKSTR",`sed 's/\$//g' temp.txt` 删除所有"$"符号...

    shell中的精髓_sed_awk

    ### 关于Shell中的sed与awk #### 一、引言 在Unix及类Unix系统(如Linux)中,`sed` 和 `awk` 是两个极其强大的文本处理工具,被广泛应用于脚本编写、数据处理以及各种自动化任务中。本文旨在深入探讨这两个工具的...

    sed_awk正则表达式

    uniq命令则可以用来过滤重复行,与sort结合使用时,可以显示每个单词出现的次数。 接下来,文章详细介绍了sed和awk的语法结构和使用方法。sed(stream editor的缩写)是一种流式编辑器,它通过一系列的命令来处理...

    shell编程,sed,awk,grep等教程整理

    本文将深入探讨shell编程,以及与之紧密相关的sed、awk和grep命令,这些都是Linux系统中进行文本处理和数据操作的重要工具。 首先,让我们了解什么是Shell编程。Shell是操作系统提供的一个接口,允许用户与系统内核...

    centOS丛书sed和awk

    ### CentOS丛书sed和awk知识点详解 #### 一、sed简介及使用 **1.1 sed的概念** sed(stream editor)是一种非交互式的行编辑器,主要用于处理文本文件。不同于交互式编辑器(如vi),sed在命令行环境中运行,通过...

    Sed & Awk 101 Hacks

    ### Sed与Awk 101 黑客技巧:详细解析 #### 引言 在UNIX/Linux环境中,熟练掌握Sed和Awk是至关重要的。无论是开发者、系统管理员、数据库管理员还是IT经理,这两个工具都能极大地提高工作效率。本文将根据《Sed & ...

    sed&awk第二版

    `sed` 的命令语法简单而强大,能够实现诸如替换字符串、删除行、插入文本等多种操作。 **关键特性:** - **文本过滤:** `sed` 可以读取输入流并输出经过处理的结果。 - **自动化编辑:** 用户可以通过编写简单的...

    正则表达式、sed与awk

    4. **模式搜索与处理(awk)**: - awk是一种基于模式扫描和处理的语言,它能够根据指定的规则对文本进行分析。例如,`awk '{print $1}' file`会打印文件file中的每一行的第一个字段。 5. **正则表达式的不同类型**...

    sed-awk正则表达式

    `sort`用于对文件内容进行排序,`uniq`则用于去除重复行,`uniq –c`可以显示每个单词出现的次数。如果需要对数字进行排序,可以结合`sort –rn`进行反向数值排序。`sort –k start,end`则可以指定排序的列。 `sed`...

    sed and awk 101 hacks.pdf (中文版带书签)

    **sed和awk是Linux系统中两个非常强大的文本处理工具,它们在处理大量数据时尤其有用。** **Sed,全称为Stream Editor,流式编辑器,它的主要功能是自动化地编辑一个或多个文件,减少重复的手动操作。** Sed的工作...

Global site tag (gtag.js) - Google Analytics