異なる数字を含む複数の文書の中で最大数を見つける方法

異なる数字を含む複数の文書の中で最大数を見つける方法

たとえば、このフォルダには異なる時間のいくつかの温度データがあります。 temps.txt温度の数値が含まれています。それでは、bashスクリプトを使用して最高温度をどのように知ることができますか? (結果には日付、時刻、および温度の数だけが表示されます./2011.10.20/00:00/temps.txt 27C。)

$ ls
2011.10.20  2012.01.20  2012.04.16  2012.07.12  2012.10.07
2011.10.21  2012.01.21  2012.04.17  2012.07.13  2012.10.08
2011.10.22  2012.01.22  2012.04.18  2012.07.14  2012.10.09
$ cd 2011.10.20

$ ls    
00:00   02:25   04:50   07:15   09:40   12:05   14:30   16:55   19:20   21:45
00:05   02:30   04:55   07:20   09:45   12:10   14:35   17:00   19:25   21:50
00:10   02:35   05:00   07:25   09:50   12:15   14:40   17:05   19:30   21:55
$ cd 00:00
$ ls
temps.txt
$ cat temps.txt
Sensor   Location              Temp
------   --------              ----
#1        PROCESSOR_ZONE       27C/80F

ベストアンサー1

findgrepおよびコマンドの組み合わせを使用して、目的のawk結果を得ることができます。以下は、記録された最高温度でファイルを印刷する1行のコードです。

find . -mindepth 3 -exec echo -n "{} " \; -exec grep "PROCESSOR_ZONE" {} \; |
awk '{
    split($4,val,"/");
    gsub("C","",val[1]);
    if (max<val[1]) {file=$1; max=val[1]}
} END {print(file)}'

出力

./2012.04.16/00:10/temps.txt

以下はscriptonelinerのバージョンです。

#!/bin/bash

# The path where temperature directories and files are kept
path="/tmp/tmp.ADntEuTlUT/"

# Temp file
tempfile=$(mktemp)

# Get the list of files name and their corresponding
# temperature data.
find "${path}" -mindepth 3 -exec echo -n "{} " \; -exec grep "PROCESSOR_ZONE" {} \; > "${tempfile}"

# Parse though the temp file to find the maximum 
# temperature based on Celsius
awk '{split($4,val,"/");gsub("C","",val[1]);if(max<val[1]){file=$1;max=val[1]}} END{print(file)}' "${tempfile}"

# Removing the temp file
rm -f "${tempfile}"

おすすめ記事