2番目のフィールドに繰り返されるほとんどの数字を印刷します。

2番目のフィールドに繰り返されるほとんどの数字を印刷します。

次のような非常に長いファイルがあります

    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

.
.
.

2番目のフィールドで最初の20個の繰り返し数を探したいです。

まず、2番目のフィールドに最も頻繁に繰り返される数字を持つ行のリストを印刷します。

その後、第2のフィールドに対して第2の繰返し数字等が続く。

答え1

あなたの質問のデータが次の場所にあるとしますfile

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

与えられたデータでは、2番目のフィールドには2つの固有番号しかありません(36141は23回発生し、36280は9回発生します)。

パイプは2番目の列を抽出するために使用されますawkcut -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:2番目のフィールドを印刷します。
  • sort:この場合、PIDはすでに隣接しているため必要ありません。いつもそういうのかはわかりません。
  • uniq:固有数とPID印刷
  • sort:逆順数字(最も高い数字から)

メインスクリプト

プロセス置換結果(20行に制限、無視)とソースファイルを入力として使用します。 PIDを2つの配列に保存aしたらb、入力ファイルを処理し、必要な行を配列に保存しcて印刷します。

  • array a:クエリに使用されるインデックスであるPID
  • array b:出力の順序を維持するためのPIDマップのインデックス
  • array c:印刷する行を保存します(PIDをインデックスとして)。

関連情報