编写shell脚本将文件中重复的行删除

        使用sort+uniq/awk/sed可以来完成。 

方法一:利用sort以不重复的方式打印出文件所有的行并排序-u,表示unique。

sort -u file

方法二:利用sort先对文件按行排好序之后再交由uniq处理。sort -k 指定列,-t指定列分隔符。

sort -k 1 -t ':' file|uniq

方法三:利用sort+awk来完成。

sort file | awk '{if ($0!=line) print;line=$0}'

if ($0!=line) print;表示当前行是否等于上一行,不等于的话则打印,line开始是空的。line=$0表示当前行赋给line。

方法四:利用sort+sed来完成。

sort file | sed '$!N; /^\(.*\)\n\1$/!P;D'

sort file将文件排序,排好序之后,重复的行会相邻。sed的单引号内的编辑命令中,各条命令以分号隔开。 

        第一条语句:$!N;表示sed当前处理的行不是文件的最后一行时,读取下一行至当前处理的行的后面,一并存储在sed的Pattern Space(模式空间)中。$表示最后一行,!N表示不读取下一行。

        第二条语句:/^\(.*\)\n\1$/!P;,斜杠//之间表示对行的匹配模式。匹配模式的描述是sed的对正则表达式的扩充。^\(.*\)表示开头起任意字符,\n表示换行符,\1表示对前面第一个小括号内的字符重复,$表示行末。所以/^\(.*\)\n\1$/整个意思是匹配换行符前后相同的两行。如this\nthis,这两行内存在sed模式空间内。!P表示匹配成功的话,就不打印当前行,sed是默认打印当前处理后的行。

        第三条语句:D命令是删除当前模式空间开端至\n的内容(不在传至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed。这样就保证了sed的模式空间中除了最后一行时,不能读取下一行,sed的模式空间中始终有两行数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大王算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值