❶ 利用linux命令行进行文本按行去重并按重复次数排序
利用linux命令行进行文本按行去重并按重复次数排序linux命令行提供了非常强大的文本处理功能,组合利用linux命令能实现好多强大的功能。本文这里举例说明如何利用linux命令行进行文本按行去重并按重复次数排序。主要用到的命令有sort,uniq和cut。其中,sort主要功能是排序,uniq主要功能是实现相邻文本行的去重,cut可以从文本行中提取相应的文本列(简单地说,就是按列操作文本行)。用于演示的测试文件内容如下:[plain]HelloWorld.AppleandNokia.HelloWorld.IwannabuyanAppledevice.TheIphoneofApplecompany.HelloWorld.TheIphoneofApplecompany.MynameisFriendfish.HelloWorld.AppleandNokia.实现命令及过程如下:[plain]1、文本行去重(1)排序由于uniq命令只能对相邻行进行去重复操作,所以在进行去重前,先要对文本行进行排序,使重复行集中到一起。$sorttest.txtAppleandNokia.AppleandNokia.HelloWorld.HelloWorld.HelloWorld.HelloWorld.IwannabuyanAppledevice.MynameisFriendfish.TheIphoneofApplecompany.TheIphoneofApplecompany.(2)去掉相邻的重复行$sorttest.txt|uniqAppleandNokia.HelloWorld.IwannabuyanAppledevice.MynameisFriendfish.TheIphoneofApplecompany.2、文本行去重并按重复次数排序(1)首先,对文本行进行去重并统计重复次数(uniq命令加-c选项可以实现对重复次数进行统计。)。$sorttest.txt|uniq-c2AppleandNokia.4HelloWorld.1IwannabuyanAppledevice.1MynameisFriendfish.2TheIphoneofApplecompany.(2)对文本行按重复次数进行排序。sort-n可以识别每行开头的数字,并按其大小对文本行进行排序。默认是按升序排列,如果想要按降序要加-r选项(sort-rn)。$sorttest.txt|uniq-c|sort-rn4HelloWorld.2TheIphoneofApplecompany.2AppleandNokia.1MynameisFriendfish.1IwannabuyanAppledevice.(3)每行前面的删除重复次数。cut命令可以按列操作文本行。可以看出前面的重复次数占8个字符,因此,可以用命令cut-c9-取出每行第9个及其以后的字符。$sorttest.txt|uniq-c|sort-rn|cut-c9-HelloWorld.TheIphoneofApplecompany.AppleandNokia.MynameisFriendfish.IwannabuyanAppledevice.下面附带说一下cut命令的使用,用法如下:[plain]cut-blist[-n][file…]cut-clist[file…]cut-flist[-ddelim][-s][file…]上面的-b、-c、-f分别表示字节、字符、字段(即byte、character、field);list表示-b、-c、-f操作范围,-n常常表示具体数字;file表示的自然是要操作的文本文件的名称;delim(英文全写:delimiter)表示分隔符,默认情况下为TAB;-s表示不包括那些不含分隔符的行(这样有利于去掉注释和标题)三种方式中,表示从指定的范围中提取字节(-b)、或字符(-c)、或字段(-f)。范围的表示方法:n只有第n项n-从第n项一直到行尾n-m从第n项到第m项(包括m)-m从一行的开始到第m项(包括m)-从一行的开始到结束的所有项在写这篇文章的时候,用到了vim的大小写转化的快捷键:gu变小写,gU变大写。结合ctrl+v能够将一片文字中的字符进行大小写转换,非常好用。
❷ LINUX下去除文件中重复的行
比如你/etc/passwd文件中有重复的行,执行如下指令清除:cat /etc/passwd | sort -u > /tmp/passwd这样/tmp/passwd中就没有重复的行了
❸ linux 去除空行,去除重复,去除特定符号
|^cat /etc/services | sed "/^$/d" | uniq | sed "/^#/d"cat /etc/services 打开文件 是你自己说用cat的,这里可以不用cat的|是管道sed "/^$/d" 删除空行uniq排除重回复的行sed "/^#/d" 删除以答#开头的行
❹ linux文件合并,关键字去重复shell脚本
看看这个:[[email protected] ~]$ join -t'|' <(sort -t'|' -k1,1 -r -k5,5 a.txt | uniq -w3 | sort -t'|' -k1,1) <(sort -t'|' -k1,1 b.txt) > c.txt[[email protected] ~]$ cat c.txt123|kkk|jjj|sss|2013-02-21 16:11:07|OFF 135|bbb|ccc|ddd|2013-01-28 16:11:07|ON456|kkk|jjj|sss|2013-01-28 16:11:07|ON789|kkk|jjj|sss|2013-02-21 16:11:07|OFF——————-另一个方案:[[email protected] ~]$ awk -F'|' 'NR==FNR{b[$1]=$2}; NR!=FNR{a[$1]=$0 OFS b[$1]; ti[$1]=(ti[$1]<$5?$5:ti[$1])}; END{for (i in a){if (a[i]~ti[i]) print a[i]}}' b.txt a.txt > c.txt[[email protected] ~]$ cat c.txt456|kkk|jjj|sss|2013-01-28 16:11:07 ON123|kkk|jjj|sss|2013-02-21 16:11:07 OFF 135|bbb|ccc|ddd|2013-01-28 16:11:07 ON789|kkk|jjj|sss|2013-02-21 16:11:07 OFF ——————-两方案都破坏原有的顺序,如果你要保持 a.txt 中的顺序,你另外做个排序吧
❺ linux 文本处理,去重问题
sortinput_file|uniq-w1
❻ linux awk去重疑问
awk 'BEGIN{var=" ' "$file" ' "}END{print var;}' "$file"题{var=" ' "$file" ' "}边符号意思第步"$file" 比a.log第二部" ' a.log' "啥意思单引号起作用cat ct.log | awk -F '{print $1 "." $3}'ct.log文件: 1997/06/30 23:54:34 +0800 cwot: fail to login jack from [email protected]
❼ linux:如何对文本里的相同行进行去重
第一个,自己写个脚本(Perl的哈希很方便)第二个,使用uniq命令可以实现
❽ linux下c语言如何去重复读数据
文件中保存的数据有实型有整型,则在读取数据时,均按浮点数据读取就好了。参考代码:#include <stdio.h>int main(){FILE *fp ;int i,n;double a[100];fp=fopen("data.txt", "r") ;if ( !fp ){printf("open file error");return -1;}i=0;while( i<100 ) //控制不能超过数组的大小{if ( fscanf(fp, "%lf",&a[i] )!= 1 ) //按浮点数读取数据break;i++;}n=i;for( i=0;i<n;i++ ) //输出读到的结果printf("%g\n", a[i] );fclose(fp);return 0;}
❾ linux中passwd文件中每一行以:为分隔符,提取出每行的最后一列,排序去重,要求去重后显示重复字段的个数
# cat /etc/passwd |cut -d':' -f7|sort|uniq -c
❿ linux文件行排序去重结果不同sort和uniq
uniq命令的帮助:-u, –unique:only print unique lines第一个方法中,你加上-u选项导致了uniq只输出唯一存在的行,有重复的行被过滤掉了所以,问题出在你的地一种方法上解决方法:uniq中不适用-u选项
未经允许不得转载:山九号 » linux文件去重|linux 文本处理去重问题