Dateien selektieren und zählen

R

Renesai

Grünschnabel
Hallo,
das ist mein erster Beitrag, bitte entschuldigt, falls nicht alles richtig geschrieben ist. Ich muss meine erste Hausaufgabe als Shellscript abgegeben und bin komplett überfordert mit der Aufgabe. Wir arbeiten hierbei mit der bash.

Folgendermaßen lautet die Aufgabenstellung:

Im Ordner Daten/ in meinem aktuellen Verzeichnis befinden sich sehr viele Daten. Einige Dateien sind nach
dem Schema YYMMDDHHLLCC.VV.dat benannt. Dabei steht
YY fuer Jahr, MM fuer Monat, DD fuer Tag, HH fuer Stunde,
LL fuer Niveaunummer, CC fuer Variablennummer und
VV fuer Vorhersagezeit in Stunden.
Folgende Fragen sind zu beantworten:

1.) Wieviele unterschiedliche Variablen gibt es und fuer wieviele Niveaus?
2.) Fuer wieviele Zeiten sind Vorhersagen im Ordner enthalten?
3.) Wieviele Stunden betraegt die Vorhersagedauer?

Das einzige, was ich bisher geschafft habe, ist die Dateien auszusuchen, die dem oben genannten Format entsprechen:

#!/bin/bash
#08/Mai/2016
#Renesai


find Daten/ -name '????????????.??.dat'




Allerdings weiß ich jetzt überhaupt nicht, wie ich jetzt die unterschiedlichen Variablen zählen kann. Ich dachte an den Befehl "wc", aber der funktioniert nicht. Zu sagen ist noch, dass ich nur Leserechte auf die ganzen Dateien habe.

Könnt ihr mir ein bisschen helfen?
Liebe Grüße von eurer Renesai
 
Spröde

Spröde

Alter Sack
wc zählt lediglich, zum selektieren und zählen würde ich awk benutzen.
 
T-One

T-One

Routinier
Hi,

da gibts einen ganzen haufen möglichkeiten. Aber wie Spröde meinte bist du mit awk schon ganz gut unterwegs.

Wenn das Format immer gleich ist, und du dich darauf verlassen kannst, also keine Checks für die Korrektheit der Namensformatierung brauchst, kannst du frage 1 z.b. leicht mit awk und . als Separator beantworten:

Code:
awk -F\. '{print $2}'
Alles vor . ist $1 danach $2 und das dat $3.

Du kannst natürlich auch viel mit Regex machen, z.b. Frage 1 via
Code:
^.{11}(\d*)

^ start des String
.{11} matched jeden Character 11 mal (also bis stelle 11)
(\d*) eine Gruppe nur aus Zahlen 0-9

Somit hast du VV jedenfalls immer nur als Zahlenwert und ähnlich benannte Dateien Pfuschen dir nicht dazwischen rum.

Das ganze halt dann für Awk anpassen, Regex und Awk ist etwas lästig, muss man recht viel escapen und einige Quantifier gehen nicht, das Regex-Beispiel wird dir also kaum via awk 1 zu 1 was auswerfen, ich verwende da eigentlich lieber Perl oder Python. Aber via regex101.com solltest du da sicher irgendwas brauchbares herausbekommen.
 
Zuletzt bearbeitet:

Ähnliche Themen

Server-Monitoring mit RRDTool

Sucheingaben

Wieviele unterschiedliche Variablen gibt es und fuer wieviele Niveaus? unix

,

dateien selektieren und zahlen unix

,

unix cat seletieren dateinamen

Oben