두 번째 필드에 반복되는 대부분의 숫자를 인쇄합니다.

두 번째 필드에 반복되는 대부분의 숫자를 인쇄합니다.

다음과 같은 매우 긴 파일이 있습니다

    llvmpipe-  36141  36258           root  mem       REG              253,0    534488  201604324 /usr/lib64/libgcrypt.so.11.8.2
    llvmpipe-  36141  36258           root  mem       REG              253,0     27504  201943960 /usr/lib64/libfontenc.so.1.0.0
    llvmpipe-  36141  36258           root  mem       REG              253,0    691680  201604095 /usr/lib64/libfreetype.so.6.10.0
    llvmpipe-  36141  36258           root  mem       REG              253,0     90632  201604087 /usr/lib64/libz.so.1.2.7
    llvmpipe-  36141  36258           root  mem       REG              253,0    153192  201604070 /usr/lib64/liblzma.so.5.0.99
    llvmpipe-  36141  36258           root  mem       REG              253,0    398272  201604073 /usr/lib64/libpcre.so.1.2.0
    llvmpipe-  36141  36258           root  mem       REG              253,0    142304  201603881 /usr/lib64/libpthread-2.17.so
    llvmpipe-  36141  36258           root  mem       REG              253,0     88720  201326789 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
    llvmpipe-  36141  36258           root  mem       REG              253,0    297464  201654760 /usr/lib64/libdw-0.163.so
    llvmpipe-  36141  36258           root  mem       REG              253,0     20024  201610087 /usr/lib64/libcap.so.2.22
    llvmpipe-  36141  36258           root  mem       REG              253,0     44096  201603885 /usr/lib64/librt-2.17.so
    llvmpipe-  36141  36258           root  mem       REG              253,0   2107800  201596079 /usr/lib64/libc-2.17.so
    llvmpipe-  36141  36258           root  mem       REG              253,0   1141560  201596087 /usr/lib64/libm-2.17.so
    llvmpipe-  36141  36258           root  mem       REG              253,0    118792  201604116 /usr/lib64/libaudit.so.1.0.0
    llvmpipe-  36141  36258           root  mem       REG              253,0     61648  202097293 /usr/lib64/libpam.so.0.83.1
    llvmpipe-  36141  36258           root  mem       REG              253,0     15616  202097295 /usr/lib64/libpam_misc.so.0.82.0
    llvmpipe-  36141  36258           root  mem       REG              253,0     23888  201868640 /usr/lib64/libXdmcp.so.6.0.0
    llvmpipe-  36141  36258           root  mem       REG              253,0      6976  202124274 /usr/lib64/libxshmfence.so.1.0.0
    llvmpipe-  36141  36258           root  mem       REG              253,0     15512  201686410 /usr/lib64/libXau.so.6.0.0
    llvmpipe-  36141  36258           root  mem       REG              253,0    216840  201943962 /usr/lib64/libXfont.so.1.4.1
    llvmpipe-  36141  36258           root  mem       REG              253,0    715344  201610107 /usr/lib64/libpixman-1.so.0.32.6
    llvmpipe-  36141  36258           root  mem       REG              253,0     54008  202770732 /usr/lib64/libdrm.so.2.4.0
    llvmpipe-  36141  36258           root  mem       REG              253,0     40784  202770730     /usr/lib64/libdl-2.17.so
    gnome-ses  36280                   gdm  mem       REG              253,0     11384  203387653 /usr/lib64/libXinerama.so.1.0.0
    gnome-ses  36280                   gdm  mem       REG              253,0    251800  201983581 /usr/lib64/libfontconfig.so.1.7.0
    gnome-ses  36280                   gdm  mem       REG              253,0     88440  203491884 /usr/lib64/libpangoft2-1.0.so.0.3600.8
    gnome-ses  36280                   gdm  mem       REG              253,0    180632  203673069 /usr/lib64/libatk-bridge-2.0.so.0.0.0
    gnome-ses  36280                   gdm  mem       REG              253,0     23768  203387616 /usr/lib64/libXfixes.so.3.1.0
    gnome-ses  36280                   gdm  mem       REG              253,0     15616  201610125 /usr/lib64/libgmodule-2.0.so.0.4200.2
    gnome-ses  36280                   gdm  mem       REG              253,0     40736  203387649 /usr/lib64/libXrandr.so.2.2.0
    gnome-ses  36280                   gdm  mem       REG              253,0   1141560  201596087 /usr/lib64/libm-2.17.so
    gnome-ses  36280                   gdm  mem       REG              253,0     44096  201603885 /usr/lib64/librt-2.17.so

.
.
.

두 번째 필드에서 처음 20개의 반복되는 숫자를 찾고 싶습니다.

먼저 두 번째 필드에 가장 많이 반복되는 숫자가 있는 행 목록을 인쇄합니다.

그런 다음 두 번째 필드에 대해 두 번째 반복되는 숫자 등이 계속됩니다.

답변1

귀하의 질문에 있는 데이터가 다음 위치에 있다고 가정합니다 file.

$ awk '{ print $2 }' <file | sort | uniq -c | sort -rn | head -n 20
  23 36141
   9 36280

주어진 데이터에서 두 번째 필드에는 고유 번호가 2개만 있습니다(36141은 23번 발생하고 36280은 9번 발생).

파이프는 두 번째 열을 추출하기 위해 awk( cut -f 2또는 데이터가 탭으로 구분된 경우 사용)을 사용합니다. 그런 다음 이 숫자 목록을 정렬하고 uniq -c각 숫자가 나타나는 횟수를 계산합니다. sort -rn개수를 가장 큰 것부터 가장 작은 것 순으로 정렬하여 최종적으로 head -n 20목록을 20개의 고유 숫자로 줄입니다(예제 데이터에서는 2개의 숫자만 고유합니다).

답변2

awk '
  FNR==NR && NR<=20{ a[$2]; b[++cnt]=$2; next }
  $2 in a{
     if ($2 in c) c[$2]=c[$2] ORS $0 # append line to existing line(s)
     else c[$2]=$0                   # add first line
  }
  END{ for (i=1; i<=cnt; i++) print c[b[i]] }
' <(awk '{ print $2 }' file | sort | uniq -c | sort -rn) file

프로세스 대체

  • awk:두 번째 필드를 인쇄합니다.
  • sort: 이 경우에는 PID가 이미 인접해 있기 때문에 필요하지 않습니다. 항상 그런 것인지는 확실하지 않습니다.
  • uniq: 고유 개수 및 PID 인쇄
  • sort:역순 숫자(가장 높은 숫자부터)

메인 스크립트

프로세스 대체 결과(20줄로 제한, 무시됨) 및 원본 파일을 입력으로 사용합니다. PID를 두 개의 배열에 저장 ab후 입력 파일을 처리하고 필요한 라인을 배열에 저장 c하고 인쇄합니다.

  • array a: 조회에 사용되는 인덱스인 PID
  • array b: 출력의 순서를 유지하기 위한 PID 맵의 인덱스
  • array c: 인쇄할 행을 저장합니다(PID를 인덱스로).

관련 정보