Uniq在比较线时跳过线的中间部分

时间:2015-06-03 17:00:55

标签: linux bash

示例文件

aa\bb\cc\dd\ee\ff\gg\hh\ii\jj

aa\bb\cc\dd\ee\ll\gg\hh\ii\jj

aa\bb\cc\dd\ee\ff\gg\hh\ii\jj

我想跳过第6场' ff'当比较一个唯一的行时,我也希望计算前面的重复行数。

我试了这个,没有任何运气:

sort -t'\' -k1,5 -k7 --unique xslin1 > xslout

预期输出

3 aa\bb\cc\dd\ee\*\gg\hh\ii\jj

2 个答案:

答案 0 :(得分:0)

$ awk -F'\' -v OFS='\' '{$6="*"} 1' xslin1 | sort | uniq -c
      3 aa\bb\cc\dd\ee\*\gg\hh\ii\jj

讨论

使用--unique时,sort仅输出唯一的行,但不计算它们。一个人需要uniq -c。此外,sort输出所有唯一的行,而不仅仅是那些排序为相同值的行。

上述解决方案采用简单的方法将第六个字段分配给*,如您在输出中所需,然后使用标准管道sort | uniq -c来生成唯一行的计数。

答案 1 :(得分:0)

你可以在一个awk中执行此操作:

awk 'BEGIN{FS=OFS="\\"} {$6="*"} uniq[$0]++{} 
       END {for (i in uniq) print uniq[i] "\t" i}' file
3   aa\bb\cc\dd\ee\*\gg\hh\ii\jj