count
Soll die Anzahl der Datensätze und deren Felder sowie Unterfelder ermittelt werden, kann dies mit dem count
-Kommando erfolgen. Ungültige Datensätze können mit dem Flag --skip-invalid
(bzw. -s
) übersprungen werden. Im folgenden Beispiel wird die Datei DUMP.dat.gz
eingelesen und die Anzahl der in der Datei enthaltenen Datensätzes (records), Felder (_fields) und Unterfelder (subfields) ausgegeben:
$ pica count -s DUMP.dat.gz
records: 12
fields: 1035
subfields: 3973
Optionen
-s
,--skip-invalid
- Überspringt jene Zeilen aus der Eingabe, die nicht dekodiert werden konnten.
-i
,--ignore-case
- Groß- und Kleinschreibung wird bei Vergleichen ignoriert.
--strsim-threshold <value>
-
Festlegen des Schwellenwerts beim Ähnlichkeitsvergleich von Zeichenketten mittels
=*
. --append
- Wenn die Ausgabedatei bereits existiert, wird die Ausgabe an die Datei angehangen. Ist das Flag nicht gesetzt, wird eine bestehende Datei standardmäßig überschrieben.
--records
-
Gibt nur die Anzahl der vorhandenen Datensätze aus. Dieses Flag ist nicht mit den Optionen
--fields
,--subfields
,--csv
,--tsv
und--no-header
kombinierbar. --fields
-
Gibt nur die Anzahl der vorhandenen Felder aus. Dieses Flag ist nicht mit den Optionen
--records
,--subfields
,--csv
,--tsv
und--no-header
kombinierbar. --subfields
-
Gibt nur die Anzahl der vorhandenen Unterfelder aus. Dieses Flag ist nicht mit den Optionen
--records
,--fields
,--csv
,--tsv
und--no-header
kombinierbar. --csv
- Die Ausgabe erfolgt im CSV-Format.
--tsv
- Die Ausgabe erfolgt im TSV-Format.
--no-header
- Es wird keine Kopfzeile in die Ausgabe geschrieben.
--where <expr>
- Angabe eines Filters, um Datensätze aus der Eingabe auszuwählen.
--and <expr>
-
Hinzufügen eines zusätzlichen Filters mittels der booleschen
&&
-Verknüpfung. Der ursprüngliche Filterausdruck<filter>
wird zum Ausdruck<filter> && <expr>
. --or <expr>
-
Hinzufügen eines zusätzlichen Filters mittels der booleschen
||
-Verknüpfung. Der ursprüngliche Filterausdruck<filter>
wird zum Ausdruck<filter> || <expr>
. --not <expr>
-
Hinzufügen eines zusätzlichen Filters. Der ursprüngliche Filterausdruck
<filter>
wird zum Ausdruck<filter> && !(<expr>)
. -p
,--progress
-
Anzeige des Fortschritts, der die Anzahl der eingelesenen gültigen sowie invaliden Datensätze anzeigt. Das Aktivieren der Option erfordert das Schreiben der Datensätze in eine Datei mittels
-o
bzw.--output
. -o
,--output
-
Angabe, in welche Datei die Ausgabe geschrieben werden soll. Standardmäßig wird die Ausgabe in die Standardausgabe
stdout
geschrieben.
Beispiele
Ausgabe im CSV/TSV-Format
Die Ausgabe des Kommandos kann auch im Format CSV bzw. TSV erfolgen, was die Weiterverarbeitung in anderen Programmen erleichtert. Die Ausgabe der Kopfzeile lässt sich mit dem Flag --no-header
ausschalten.
$ pica count -s --csv DUMP.dat.gz
records,fields,subfields
12,1035,3973
$ pica count -s --tsv DUMP.dat.gz
records fields subfields
12 1035 3973
$ pica count -s --csv --no-header DUMP.dat.gz
12,1035,3973
Ausgabe in eine Datei
Die Ausgabe des Kommandos wird standardmäßig auf der Konsole ausgegeben. Diese kann mit der Option --output
(bzw. -o
) in eine Datei umgeleitet werden. Soll diese Datei eine neue Zeile erhalten und nicht bei jedem Aufruf überschrieben werden, kann dies mit dem Flag --append
erzielt werden.
$ pica count -s --csv -o count.csv DUMP.dat.gz
$ cat count.csv
records,fields,subfields
12,1035,3973
$ pica count -s --csv --append -o count.csv DUMP.dat.gz
$ cat count.csv
records,fields,subfields
12,1035,3973
12,1035,3973
Ausgabe von Einzelwerten
Soll entweder die Anzahl von Datensätzen, Feldern oder Unterfeldern ausgegeben werden, kann dies mit den Flags --records
, --fields
bzw. --subfields
erfolgen. Diese Flags schließen sich gegenseitig aus und können nicht mit den Flags --csv
, --tsv
und --no-header
kombiniert werden.
$ pica count -s --records DUMP.dat.gz
12
$ pica count -s --fields DUMP.dat.gz
1035
$ pica count -s --subfields DUMP.dat.gz
3973
Anwendungsbeispiel
Soll die Veränderung (Anzahl Datensätze, Felder, Unterfelder) eines PICA-Abzugs über die Zeit verfolgt werden, könnte dies wie folgt erreicht werden:
$ echo "date,records,fields,subfields" > count.csv # Kopfzeile
$ pica count -s dump_20220222.dat.gz --append -o count.csv # Initialer Aufruf
$ pica count -s dump_20220223.dat.gz --append -o count.csv # Aufruf nach x Tagen
$ cat count.csv
$ records,fields,subfields
7,247,549
9,347,1022
Soll auch das aktuelle Datum vor die Zeile geschrieben werden, könnten bspw. folgende Unix-Kommandos genutzt werden:
# Schreiben der Kopfzeile
$ echo "date,records,fields,subfields" > count.csv
# Aufruf am 22.02.2022
$ pica count -s --no-header --csv dump_20220222.dat.gz | \
xargs -d"\n" -I {} date +"%Y-%m-%d,{}" >> count.csv
# Aufruf am 23.02.2022
$ pica count -s --no-header --csv dump_20220223.dat.gz | \
xargs -d"\n" -I {} date +"%Y-%m-%d,{}" >> count.csv
$ cat count.csv
$ date,records,fields,subfields
2022-02-22,7,247,549
2022-02-23,9,347,1022