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

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

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

abc100200300 abmen
abc100200300 arcxi
xyz200300300 aelmi

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

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

abc100200300 abmen
abc100200300 arcxi

答案1

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

   -w, --check-chars=N
          compare no more than N characters in lines

所以

sort file | uniq -D -w12
abc100200300 abmen
abc100200300 arcxi

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

sort file | uniq -D -w12 > newfile

答案2

单程:

cut -c -12 file | uniq -d | grep -f - file

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

答案3

GNU 的双遍方法awk保留输入文件中的顺序:

gawk -v FIELDWIDTHS=12 '
  ARGIND == 1 {c[$1]++; next}
  FNR == 1 {for (i in c) if (c[i] < 2) delete c[i]}
  $1 in c' inputFile inputFile

POSIX 等效项:

awk '
  {key = substr($0, 1, 12)}
  !first_pass_done {c[key]++; next}
  FNR == 1 {for (i in c) if (c[i] < 2) delete c[i]}
  key in c' inputFile first_pass_done=1 inputFile

答案4

我已经使用下面的 awk 和 sed 命令完成了

输入文件

abc100200300 abmen
abc100200300 arcxi
xyz200300300 aelmi

脚本

#!/bin/bash
for i in `awk '{print substr($1,1,12)}' Inputfile | sort | uniq`
do
j=`sed -n "/$i/p" Inputfile| wc -l`
if [[ $j > 1 ]]
then
sed -n "/$i/p" Inputfile>> /var/tmp/new_file_duplicate.txt
fi
done

New_file_duplicate.txt 包含以下内容

abc100200300 abmen
abc100200300 arcxi

相关内容