Bash - 删除重复项保留顺序

标签 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 代码。提前谢谢你。

最佳答案

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

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

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

关于Bash - 删除重复项保留顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39076336/

相关文章:

database - 使用 Doctrine2 Fixtures 时如何保存特定表/实体中的数据?

linux - 终止管道中的上一个命令

linux - 使用脚本从函数中提取参数

bash - 如何检查while循环是否被执行?

c - 如何计算在 FOR 循环中检查条件的次数

php - 如何按值对多维数组进行排序?

xml - 保留 xml 编码 XSLT

linux - 通过 Bash 登录站点 (Stack Overflow)

javascript合并/排序 fatal error

python - 在python中访问时如何保留matlab结构?