Ich bin neu hier und möchte fragen, wie man Dateigrößen mit dem gleichen Namen hinzufügt. Meine Dateinamen unterscheiden sich tatsächlich voneinander, aber ich habe sie ausgeschnitten, damit ich Dateien erhalten kann, die in Gruppen zusammengefasst sind.
Hier sind meine Originaldateien mit Größen (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 aus, um diese Zeichen ab '_' (Unterstrich) zu entfernen. Sie werden so:
- 12345 a
- 12234 b
- 32123 c
- 11122 a
Jetzt möchte ich die Größe aller Dateien mit demselben Dateinamen wie oben hinzufügen. Die Ausgabe sollte folgendermaßen aussehen:
- 23467 a
- 12234 b
- 32123 c
Bitte helfen Sie. Vielen Dank, Jungs. Ich stecke jetzt schon seit Stunden hier fest
sample.txt
und Sie sie in der Ausgabe möchten. Es sieht aus wie eine nummerierte Liste, also vielleicht auch nicht. Bitte fügen Sie Ihre Datei und die gewünschte Ausgabe eincode sample
, um Verwirrung zu vermeiden.Antworten:
Vorausgesetzt, es gibt keine Zeilennummern in
sample.txt
:Möglicherweise möchten Sie
| sort -k 2
am Ende hinzufügen .EDIT1 - Erläuterung wie gewünscht:
Der
cut
Befehl schneidet jede Zeile mit_
Trennzeichen ab und speichert nur den ersten Teil. Sie haben es bereits mit Ihrer Originaldatei gemacht.Dann findet der
awk
Befehl in jeder Zeile zwei Felder. Wir nennen sie Größe und Name ,awk
bezeichnen sie aber als$1
und$2
intern. Für jede Zeile wird ein Element eines Arrays erhöhta
(der Namea
wird willkürlich gewählt und hat nichts mit dem Dateinamen im Beispiel zu tun). Der Name gibt an$2
, welches Element erhöht werden soll - es ist ein Index. Die Größe$1
ist der Inkrementierungswert.awk
ist schlau genug, uma
Elemente zu initialisieren ,0
wie es zum ersten Mal erwähnt wird. Das jeweilige Element wird jedes Mal inkrementiert, wenn sein Index ( Name ) als zweites Feld in der Eingabezeile erscheint. Am Ende (nach der letzten Zeile der Eingabe)awk
Durchläuft jeden bekannten Index vona
und gibt den Wert (der jetzt kumulative Größe ist ) und einen Index ( Name ) aus.quelle
So erhalten Sie die Summe aller Dateien, die mit "" beginnen
a_
:du
Berechnet die Größe aller Dateien und-c
summiert die Größen. Das grep extrahiert nur die Gesamtsumme und nicht alle einzelnen Dateien.quelle