2

我有一个看起来像的文件

1254543534523233434
3453453454323233434
2342342343223233535
0909909092324243535

bash中是否有一种方法/命令可以根据特定的子字符串删除上面文件中的重复项,而不改变它们在输出中的顺序?

IE

(带子字符串-> ${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 代码。先感谢您。

4

1 回答 1

7

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

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

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