怎样使用 awk 删掉文件中重复的行

假定你有一个文本文件,你须要删掉一切重复的行。
TL;DR要坚持本来的摆放次序删掉重复行,运用:
awk'!visited[$0]++'your_filededuplicated_file作业原理
这个脚本保护一个相关数组,索引(键)为文件中去重后的行,每个索引对应的值为该行呈现的次数。关于文件的每一行,假如这行(之前)呈现的次数为则值加并打印这行,不然值加不打印这行。
我之前不熟悉awk,我想弄清楚这么矮小的一个脚本是怎样完成的。我调研了下,下面是调研心得:
这个awk“脚本”!visited[$0]++对输入文件的每一行都履行。
visited[]是一个相关数组(又叫映射)类型的变量。awk会在榜首次履行时初始化它,因而咱们不须要初始化。
$0变量的值是当时正在被处理的行的内容。
visited[$0]经过与$0(正在被处理的行)持平的键来访问该映射中的值,即呈现次数(咱们在下面设置的)。
!对表明呈现次数的值取反:在awk中,恣意非零的数或恣意非空的字符串的值是true。变量默许的初始值为空字符串,假如被转换为数字,则为0。也就是说:假如visited[$0]的值是一个比0大的数,取反后被解析成false。假如visited[$0]的值为等于0的数字或空字符串,取反后被解析成true。++表明变量visited[$0]的值加1。假如该值为空,awk主动把它转换为0(数字)后加1。留心:加1操作是在咱们取到了变量的值之后履行的。
总的来说,整个表达式的意思是:
true:假如表明呈现次数为0或空字符串
false:假如呈现的次数大于0
awk由形式或表达式和一个与之相关的动作组成:
形式/表达式{动作}假如匹配到了形式,就会履行后边的动作。假如省掉动作,awk默许会打印(print)输入。
咱们的脚本由一个awk表达式句子组成,省掉了动作。因而这样写:
awk'!visited[$0]++'your_filededuplicated_file
等于这样写:
awk'!visited[$0]++{print$0}'your_filededuplicated_file关于文件的每一行,假如表达式匹配到了,这行内容被打印到输出。不然,不履行动作,不打印任何东西。
为什么不必uniq指令?uniq指令仅能对相邻的行去重。这是一个示例:
$$其他办法运用sort指令
咱们也能够用下面的sort指令来去除重复的行,可是本来的行次序没有被保存。
sort-uyour_filesorted_deduplicated_file运用cat+sort+cut
上面的办法会产出一个去重的文件,各行是根据内容进行排序的。经过管道衔接指令能够处理这个问题。
cat-nyour_file|sort-uk2|sort-nk1|cut-f
作业原理
假定咱们有下面一个文件:
abcghiabcdefxyzdefghiklm
在每行前面显现序号:
1abc2ghi3abc4def5xyz6def7ghi8klm
sort-uk2根据第二列(k2选项)进行排序,关于第二列相同的值只保存一次(u选项):
1abc4def2ghi8klm5xyz
sort-nk1根据榜首列排序(k1选项),把列的值作为数字来处理(-n选项):
1abc2ghi4def5xyz8klm
最终,cut-f从第二列开端打印每一行,直到最终的内容(-f选项:留心-后缀,它表明这行后边的内容都包括在内)。
abcghidefxyzklm参阅
GNUawk用户手册
awk中的数组
Awk—真值
Awk表达式
Unix怎样删去文件中重复的行?
不必排序去掉重复的行(去重)
‘!a[$0]++’作业原理
以上为全文。
via:
作者:LazarusLazaridis选题:lujun9972译者:lxbwolf校正:wxy
本文由LCTT原创编译,Linux我国荣誉推出
推荐阅读
-
北京平谷:本周日自行车赛事期间,这些道路临时交通管制
具体比赛路线为:由石林峡景区出发,经胡关路、胡黑路北延、黑黄路、黄松峪水库西路、到...
-
去了桂林阳朔3次,有些话不得不说!
而且,建议选择住在远离西街的民宿或者客栈,这样可以更加安静地享受阳朔的宁静与美好。...
-
1973年,建到14层的北京饭店危及中南海,幸好汪东兴及时发现不
这个方案既不影响北京饭店的整体规划,又能有效保护中南海的安全。结语:安全与发展的平...
-
滑轨抽屉怎么把抽屉取出来?了解这一些,轻松搞定拆卸的问题!
操作过程为:首先把抽屉柜向外拉,拉到最大规模就可以看到抽屉柜两边滑轨上有卡扣的(黑色...
-
我市于红玲入选“中国好人榜”4月份候选人
热心为下岗职工服务人人称赞的业委会主任为满足居民日益增长的精神文化需求,于红玲组织...
-
百家姓氏-湖南地区任姓来源
湘阴毛塘任氏始迁祖夔公,后唐同光2年(924)自江西南昌县铁树观迁居湘阴县一都石壁毛塘,...
-
浪琴表全新康卡斯系列V.H.P.计时腕表品鉴
腕表全体实拍表盘细节实拍该系列装备直径42mm或44mm两种表壳尺度挑选,腕表指示时、分、秒,...
-
返回时间又缩短了!神十四飞船9小时着陆,比神十二缩短近20小时
无论是上天仍是回来,缩短时刻的办法首要便是尽量多地削减飞船对接空间站之前或脱离空间...
-
玫瑰花枝用水怎么养,水养玫瑰花生根的方法
水养玫瑰花生根应该留意频频替换水,运用生根剂,适宜的温度和光照条件。水养玫瑰花生根...
-
官宣!洮南四海湖“冰汤圆”获基尼斯认证
活动现场气氛十分热烈,省内文学艺术创作及摄影领域的资深人士,省内外知名媒体代表以及...