列1の最大値を見つけて、ファイルから列2の対応するレコードを印刷します。

列1の最大値を見つけて、ファイルから列2の対応するレコードを印刷します。

列1で最大値を見つけ、n個のレコードを含むファイル内の対応するパスの場所をエコーする方法。

$ cat version.log
112030  /opt/oracle/app/oracle/product/11.2.0
121010  /opt/oracle/app/oracle/product/12.1.0

予想出力:

/opt/oracle/app/oracle/product/12.1.0

ベストアンサー1

これは働きます:

awk -v max=0 '{if($1>max){want=$2; max=$1}}END{print want} ' version.log

-v max=0変数がに設定されたmax後、0各行の最初のフィールドが現在の値と比較されますmax。大きい場合、max最初のフィールドの値に設定され、want現在の行に設定されます。プログラムがファイル全体を処理すると、現在のwant値が印刷されます。

編集する

awkこのソリューションを事前にテストしておらず、これを提供したのは本当に私のせいです。とにかく、回答の編集されたバージョンが機能するはずです(修正してくれたterdonに感謝します)。また、以下もテストしました。

sort -nrk1,1 filename | head -1 | cut -d ' ' -f3

私はsort最初のフィールドにいます。

  • -n は数値ソートを指定します。
  • -r は逆順ソート結果を指定します。
  • -k1,1 は、ソートする最初のフィールドを指定します。

これで、ソート後に出力をパイプして最初の結果を得ました。これにより、結果の列1に数値的に最も高い値が与えられます。

これで、cut空白区切り記号でパイプを接続し、-f3予想される出力を印刷します。

テスト

cat filename
112030   /opt/oracle/app/oracle/product/11.2.0
121010   /opt/oracle/app/oracle/product/12.1.0
2312     /hello/some/other/path
3423232  /this/is/really/big/number
342      /ok/not/the/maximum/number
9999899  /Max/number
9767     /average/number

上記の入力に対して上記のコマンドを実行すると、次の出力が表示されます。

/Max/number

おすすめ記事