たとえば、このフォルダには異なる時間のいくつかの温度データがあります。
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
find
、grep
およびコマンドの組み合わせを使用して、目的の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
以下はscript
onelinerのバージョンです。
#!/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}"