目标文件
./aa/sdf/dslkfjuklsdfjlksjdf
./aa/sdf/dslkfjuklsdfjlksjdf
./bb/sdf2/dslkfjuklsdfjlksjdf
./bb/sdf2/dslkfjuklsdfjlksjdf
./bb/sdf2/dslkfjuklsdfjlksjdf
./bb/sdf2/dslkfjuklsdfjlksjdf
./cc/sdf3/dslkfjuklsdfjlksjdf
清洗目标为:
aa/sdf
bb/sdf2
cc/sdf3
第一步截取
用到cut -d、-f命令、详情查看:https://www.runoob.com/linux/linux-comm-cut.html
cut -f FIELD_LIST filename
FIELD_LIST是需要显示的列。它由列好组成,彼此之间用逗号分隔。例如:
cut -f 2,3 filename
这条命令将显示第2列和第3列。
制表符是字段或列的默认定界符。没有定界符的行也会照原样打印出来。要避免打印出这种不包含定界符的行,则可以使用cut的-s选项。
要指定字符的定界符,使用-d选项。
另外,cut命令还可以将一串字符作为列来显示。
-b 表示字节;
-c 表示字符;
-f 表示定义字段。
下表列出了字符范围的记法:
记法 | 范围 |
N- | 从第N个字节,字符或字段到行尾 |
N-M | 从第N个字节,字符或字段到第M个(包括第M个在内)字节、字符或字段 |
-M | 第1个字节,字符或字段到第M个(包括第M个在内)字节、字符或字段 |
#-d 后面是分割的内容,-f 2-3是取出第二和第三个,从0开始
cat test.txt |cut -d / -f 2-3
第一步得到的结果:
aa/sdf
aa/sdf
bb/sdf2
bb/sdf2
bb/sdf2
bb/sdf2
cc/sdf3
第二步去重
去重的方式有几种、用到的命令有sort、uniq
sort详情:https://www.runoob.com/linux/linux-comm-sort.html
将第一步的结果写到t.log下
方式1
sort -u +文件名
sort -u t.log 或者 cat t.log |sort -u
结果
aa/sdf
bb/sdf2
cc/sdf3
方式2
使用uniq,uniq达到去重的目的,需要与sort结合使用。先排序再去重,否则达不到去重的目的!
sort t.log |uniq
结果
aa/sdf
bb/sdf2
cc/sdf3
查看没有重复的记录 uniq -u
temp]$ sort t.log |uniq -u
结果
cc/sdf3
查看发生重复的记录 uniq -d
sort t.log |uniq -d
结果
aa/sdf
bb/sdf2
如果要查看每个重复的数量可以使用uniq -dc (c是用来计数)
sort t.log |uniq -dc
结果
2 aa/sdf
4 bb/sdf2