Bash - 删除重复项保留顺序

时间:2016-08-22 09:50:39

标签: bash sorting preserve

我有一个看起来像

的文件
1254543534523233434
3453453454323233434
2342342343223233535
0909909092324243535

bash中有一个方法/命令可以根据特定的子字符串删除上面文件中的重复项,而不更改输出中的顺序吗?

(使用子字符串 - > $ {line: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代码。提前谢谢。

1 个答案:

答案 0 :(得分:4)

您可以使用awk而无需排序:

awk '!uniq[substr($0, 12, 8)]++' file

1254543534523233434
2342342343223233535
0909909092324243535
  • 由于awk索引从1开始,您需要使用substr($0, 12, 8)从第12个位置开始获取所需的8个字符的长文本。
  • uniq是一个关联数组,其中使用substr函数检索子字符串。
  • ++将数组值设置为1