Was ist der Unterschied zwischen cat und nur Piping?

Was ist der Unterschied zwischen cat und nur Piping?

Angenommen, ich habe dieses Skript geschrieben:

#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

zwei Fragen: 1) Warum funktioniert das erste Skript nur wie erwartet, wenn ich es so schreibe:

cat `cat <file1.txt> | grep "*.log" | head -4 | tail -2`  helper | sort -r -n -k2 

2) Soll ich grep "*.log"„.log“ verwenden oder grepen?

Was das Skript macht:

Bei einer gegebenen Datei1 möchten wir nur 2 Protokolldateien lesen, wobei die letzte die Nummer 4 aller .log-Dateien in der gegebenen Datei1 ist: Beispiel:

Bildbeschreibung hier eingeben

Ich möchte, dass der erste Teil des Skripts lautet: tuesday.log und wednesday.log und dass danach die Zeit jedes Protokollzeitpunkts jeder Person berechnet wird, deren Name in den Protokolldateien steht: Bildbeschreibung hier eingeben

und das wird ausgedruckt:

Bildbeschreibung hier eingeben

Antwort1

Um Ihre Frage zu beantworten: Das Problem liegt in Ihrer Verwendung von grep.

Grep nimmt Ihre Eingabe wörtlich, wenn Sie also mit greppen *.log, sucht es aktiv nach dem Zeichen „Stern“ , *gefolgt von .log, und wird daher nichts finden.

Als Schnelltest:

Der Befehl echo hello.log | grep "*.log"gibt nichts zurück

Der Befehl echo hello.log | grep ".log"gibt die Zeile zurück

verwandte Informationen