So führen Sie mehrere Dateien basierend auf dem Änderungsdatum zusammen und ignorieren die erste Zeile in jeder Datei

So führen Sie mehrere Dateien basierend auf dem Änderungsdatum zusammen und ignorieren die erste Zeile in jeder Datei

Ich habe folgende Dateien:

-rw-r--r--  1 xyz xyz    122 May 01 01:00  Test1
-rw-r--r--  1 xyz xyz    122 May 01 01:00  Test2
-rw-r--r--  1 xyz xyz    122 May 05 05:00  Test3
-rw-r--r--  1 xyz xyz    122 May 05 05:00  Test4

Der Inhalt der Dateien enthält eine Beschreibungszeile, gefolgt von Daten, getrennt durch Kommas. Beispiel:

Test 1:

ID, Name, Job, Address
1111, John, Janitor, 1234 Corson Ave

Test 2:

ID, Name, Job, Address
2222, Tim, Cashier, 3245 Elliot St

Kann jemand bitte einen Befehl vorschlagen, der die oben genannten Dateien basierend auf dem Änderungsdatum verkettet und dabei die erste Zeile in der Datei ignoriert, die die Beschreibung (ID, Name, Job, Adresse) enthält.

Dies ist beispielsweise, was ich nach dem Skript möchte:

1. Mai_Datei_nach_Verkettung:

1111, John, Janitor, 1234 Corson Ave
2222, Tim, Cashier, 3245 Elliot St

Dasselbe gilt für May5_file_after_concatenate. Das Verzeichnis, das ich habe, wird viele Millionen Dateien enthalten. Ich brauche eine automatische Sortierung basierend auf dem Änderungsdatum und eine entsprechende Verkettung.

Ich verwende Centos 7.

Antwort1

In bashkönnen Sie das folgende Skript verwenden:

#! /bin/bash
for file in "$@" ; do
    date=$(stat -c%y "$file" | cut -f1 -d' ')
    tail -n+2 "$file" >> "$date"
done

Es iteriert über die angegebenen Dateien, ruft das letzte Änderungsdatum ab und fügt dann alles ab Zeile 2 zu einer nach dem Datum benannten Datei hinzu.

Wenn zu viele Dateien in eine Befehlszeile oder in Parameter passen, rufen Sie das Skript nacheinander für kleinere Dateigruppen auf (mit xargsoder manuell).

Das Konvertieren des Datumsformats sollte einfach sein :-)

verwandte Informationen