查找每行前 12 个字符的重复项

log*_*ger 6 text-processing

我的文件看起来像这样......

abc100200300 abmen
abc100200300 arcxi
xyz200300300 aelmi
Run Code Online (Sandbox Code Playgroud)

如何将具有重复项的行(基于仅检查前 12 个字符)打印到单独的文件中?

所以在单独的文件中我应该有

abc100200300 abmen
abc100200300 arcxi
Run Code Online (Sandbox Code Playgroud)

ste*_*ver 9

我不确定它是标准选项还是 GNU 扩展,但如果你uniq有一个-w标志:

   -w, --check-chars=N
          compare no more than N characters in lines
Run Code Online (Sandbox Code Playgroud)

所以

sort file | uniq -D -w12
abc100200300 abmen
abc100200300 arcxi
Run Code Online (Sandbox Code Playgroud)

或者,重定向到一个新文件

sort file | uniq -D -w12 > newfile
Run Code Online (Sandbox Code Playgroud)

  • (请注意,对于当前未打补丁的 GNU `uniq`(和 busybox)版本,它不超过 N _bytes_,而不是 _characters_。例如,对于 `-w1`,它会说 `á` 和 `é` 在UTF-8 语言环境,因为这两个字符的编码以相同的字节开始。 (2认同)

Gur*_*uru 4

单程:

cut -c -12 file | uniq -d | grep -f - file
Run Code Online (Sandbox Code Playgroud)

提取前 12 个字符,获取重复的字符,并获取与重复模式匹配的行。

  • `uniq` 需要排序的输入。@logger 没有说明文件是否已排序或未排序,因此最好假设它未排序。`剪切-c -12 文件| 排序| uniq -d > 新文件`。不知道为什么你有“grep -f”管道 - 提到的“单独文件”是欺骗列表的输出文件,而不是要匹配的模式列表。 (2认同)