파일 전체에서 특정 단어(이 경우 숫자)를 찾아 정렬하고, 한 번만 나타나면 삭제합니다.
입력하다:
1. I love my country 1234
2. I love Newyork 5678
3. I love my city 1234
4. I love my pet 1111
5. I love my dog 2222
6. I love my cat 1111
7. I love my cat 5555
산출:
1. I love my country 1234
2. I love my city 1234
3. I love my pet 1111
4. I love my cat 1111
시도함: sort -u
올바른 결과를 제공하지 못했습니다.
답변1
노력하다:
awk '{c[$NF+0]++; a[NR]=$NF+0; b[NR]=$0} END{for(i=1;i<=NR;i++)if(c[a[i]]>1)print b[i]}' file
입력 파일을 사용하십시오.
$ cat file
I love my country 1234
I love Newyork 5678
I love my city 1234
I love my pet 1111
I love my dog 2222
I love my cat 1111
I love my cat 5555
위 명령은 다음을 생성합니다.
$ awk '{c[$NF+0]++; a[NR]=$NF+0; b[NR]=$0} END{for(i=1;i<=NR;i++)if(c[a[i]]>1)print b[i]}' file
I love my country 1234
I love my city 1234
I love my pet 1111
I love my cat 1111
여러 줄 버전
여러 줄에 걸쳐 명령을 분산시키려는 경우:
awk '
{
c[$NF+0]++
a[NR]=$NF+0
b[NR]=$0
}
END{
for(i=1; i<=NR; i++)
if (c[a[i]]>1)
print b[i]
}
' file
이제 괜찮아
c[$NF+0]++
이제 배열은
c
파일의 각 줄 마지막 필드에 여러 번 나타나는 숫자를 추적합니다.a[NR]=$NF+0
배열은
a
행 번호 키 아래 행의 마지막 필드에 숫자를 저장합니다NR
.b[NR]=$0
줄 번호의 경우
NR
배열은b
줄을 저장합니다.END{for(i=1;i<=NR;i++)if(c[a[i]]>1)print b[i]}
파일 끝에 도달하면 각 줄을 다시 반복하고
c
줄의 숫자 개수( 에서 제공a
)가 1보다 크면 줄을 인쇄합니다.