각 줄의 처음 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

관련 정보