특정 숫자 찾기 및 정렬

특정 숫자 찾기 및 정렬

파일 전체에서 특정 단어(이 경우 숫자)를 찾아 정렬하고, 한 번만 나타나면 삭제합니다.

입력하다:

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보다 크면 줄을 인쇄합니다.

관련 정보