
Ich bin neu hier und möchte fragen, wie ich die Größe von Dateien mit demselben Namen addieren kann. Meine Dateinamen unterscheiden sich eigentlich voneinander, aber ich habe sie gekürzt, damit ich gruppierte Dateien erhalten konnte.
hier sind meine Originaldateien mit Größenangaben (Beispiel)
sample.txt enthält diese Daten:
- 12345 a_1.txt
- 12234 b_1.txt
- 32123 c_1.txt
- 11122 a_2.txt
Jetzt schneide ich die Dateinamen in sample.txt ab, um die Zeichen zu entfernen, die mit '_' (Unterstrich) beginnen. Sie sehen dann so aus:
- 12345 a
- 12234 b
- 32123 c
- 11122 a
Jetzt möchte ich die Größen aller Dateien mit demselben Dateinamen wie oben gezeigt addieren. Die Ausgabe sollte wie folgt aussehen:
- 23467 a
- 12234 b
- 32123 c
Bitte helft mir. Vielen Dank, Leute. Ich stecke jetzt schon seit Stunden hier fest.
Antwort1
Angenommen, es gibt keine Zeilennummern in sample.txt
:
cut -f 1 -d _ sample.txt | awk '{a[$2] += $1} END{for (i in a) print a[i], i}'
| sort -k 2
Möglicherweise möchten Sie es am Ende hinzufügen .
EDIT1 - Erklärung wie gewünscht:
Der cut
Befehl schneidet jede Zeile mit _
Trennzeichen ab und speichert nur den ersten Teil. Das haben Sie bereits mit Ihrer Originaldatei getan.
Dann awk
findet der Befehl in jeder Zeile zwei Felder. Wir nennen sieGrößeUndName, sondern awk
bezeichnet sie intern als $1
und $2
. Für jede Zeile wird ein Element eines Arrays erhöht a
(der Name a
ist willkürlich gewählt und hat nichts mit dem Dateinamen im Beispiel zu tun). DieName $2
gibt an, welches Element erhöht werden soll - es ist ein Index; dasGröße $1
ist der Inkrementierungswert. awk
ist intelligent genug, um a
das Element mit zu initialisieren 0
, wie es zum ersten Mal erwähnt wird. Das jeweilige Element wird jedes Mal inkrementiert, wenn sein Index (Name) erscheint als zweites Feld der Eingabezeile. Am Ende (nach der letzten Zeile der Eingabe) awk
durchläuft jeden bekannten Index von a
und druckt den Wert aus (der jetztkumulative Größe) und einen Index (Name).
Antwort2
Um die Summe aller Dateien zu erhalten, die mit „Sie“ beginnen, a_
können Sie Folgendes tun:
du -c a_* | grep total
du
berechnet die Größe aller Dateien und -c
addiert dann die Größen. Der grep extrahiert nur die Gesamtsumme und nicht alle einzelnen Dateien.