내 파일은 다음과 같습니다 ...
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