私がこのスクリプトを書いたと仮定します:
#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
文字 star を積極的に検索するため、何も見つかりません。*
.log
簡単なテストとして、
コマンドはecho hello.log | grep "*.log"
何も返しません
このコマンドはecho hello.log | grep ".log"
行を返します