私が次のスクリプトを書いたとしましょう。
#print_time..
cat <file1.txt> | grep "*.log" | head -4 | tail -2 | helper | sort -r -n -k2
#helper..
while read line; do
linearr=($line)
(( time =${line[2]} - ${line[1]} +0 ))
echo ${line[o]} $time
done
2つの質問:1)次のように書くとき、最初のスクリプトが期待どおりに機能するのはなぜですか?
cat `cat <file1.txt> | grep "*.log" | head -4 | tail -2` helper | sort -r -n -k2
2)grep "*.log"
「.log」を使用する必要がありますか、それともgrepを使用する必要がありますか?
このスクリプトの機能は次のとおりです。
file1が与えられた場合、最後のログファイルが指定されたfile1のすべての.logファイルのうち4番目の場合、2つのログファイルのみを読み取ろうとします。例:
私はスクリプトの最初の部分であるtuesday.logとwednesday.logを読んで、ログファイルに名前がある各人の各ログ時間を計算したいと思います。
次のように印刷されます。
答え1
あなたの質問に答えるために問題はgrep
。
Grepはユーザーが入力した内容をテキストとして扱うため、grepを使用するとアスタリスク文字に続く文字を*.log
積極的に見つけるため、何も見つかりません。*
.log
クイックテストでは、
このコマンドはecho hello.log | grep "*.log"
何も返しません。
このコマンドはecho hello.log | grep ".log"
次の行を返します。