巴什 - 删除重复维持秩序
问题描述:
我有一个看起来像巴什 - 删除重复维持秩序
1254543534523233434
3453453454323233434
2342342343223233535
0909909092324243535
有没有在bash的方式/命令删除上面的文件,基于特定字符串复制一个文件,而无需改变它们的顺序输出?
即
(含子 - > $ {行:11:8}
1254543534523233434
2342342343223233535
0909909092324243535
我知道:
sort -u : sorts them numerically, then removes duplicates
sort -kx,x -u : The same
cat filein | uniq : requires them to be sorted already or it will not work
余米试图找出是否有一个本地linux解决方案无需解析perl代码就可以了。提前致谢。
答
你可以不使用awk需要排序:
awk '!uniq[substr($0, 12, 8)]++' file
1254543534523233434
2342342343223233535
0909909092324243535
- 由于AWK指数从
1
开始,你需要使用substr($0, 12, 8)
,从而获得所需8个字符的文本从第12位出发。 -
uniq
是一个关联数组,其子字符串使用substr
函数进行检索。 -
++
套阵列的值作为1
+1
这工作完美,谢谢。 – onlyf
这不是一个确切的重复。它具有额外的限制,仅根据子字符串比较行,但打印完整行。 但是,[答案](http://*.com/questions/1444406/how-can-i-delete-duplicate-lines-in-a-file-in-unix)应该很容易扩展到'awk' ![substr($ 0,11,8)] ++'file.txt'。 –