キャットとパイプのみの違いは何ですか?

キャットとパイプのみの違いは何ですか?

私がこのスクリプトを書いたと仮定します:

#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"行を返します

関連情報