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:
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:
und das wird ausgedruckt:
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