Fájlok egyesítése és rendezése Linuxon

, Author

Szövegfájlok egyesítésének és rendezésének számos módja van Linuxon, de az, hogy hogyan kell ezt megtenni, attól függ, hogy mit akarsz elérni – akár egyszerűen több fájl tartalmát akarod egy nagy fájlba helyezni, akár úgy akarod rendezni, hogy könnyebben használható legyen. Ebben a bejegyzésben megnézünk néhány parancsot a fájlok tartalmának rendezésére és összevonására, és arra összpontosítunk, hogy az eredmények hogyan különböznek egymástól.

A cat használata

Ha csak egy fájlcsoportot szeretne egyetlen fájlba összevonni, a cat parancs könnyű választás. Mindössze annyit kell tennie, hogy beírja a “cat” parancsot, majd a parancssoron felsorolja a fájlokat abban a sorrendben, ahogyan azokat az egyesített fájlban szerepeltetni szeretné. A parancs kimenetét irányítsa át a létrehozni kívánt fájlba. Ha a megadott nevű fájl már létezik, azt felülírja a létrehozandó fájl. Például:

$ cat firstfile secondfile thirdfile > newfile

Ha egy fájlsorozat tartalmát szeretné hozzáadni egy meglévő fájlhoz, ahelyett, hogy felülírná azt, csak módosítsa a >-t >>-re.

$ cat firstfile secondfile thirdfile >> updated_file

Ha az egyesítendő fájlok valamilyen kényelmes elnevezési konvenciót követnek, a feladat még egyszerűbb lehet. Nem kell az összes fájlnevet felvennie, ha azokat egy reguláris kifejezéssel adhatja meg. Ha például a fájlok mindegyike a “file” szóra végződik, mint a fenti példában, akkor valami ilyesmit tehet:

$ cat *file > allfiles

Megjegyezzük, hogy a fenti parancs a fájlok tartalmát alfanumerikus sorrendben adja össze. Linuxon a “filea” nevű fájl a “fileA” nevű fájl előtt, de a “file7” nevű fájl után kerülne hozzáadásra. Végül is nem csak “ABCDE”-re kell gondolnunk, amikor egy alfanumerikus sorrendről van szó, hanem “0123456789aAbBcCdDeE”-re is. Mindig használhatsz egy olyan parancsot, mint az “ls *file”, hogy megnézd a fájlok sorrendjét, mielőtt összevonod a fájlokat.

MEGJEGYZÉS: Jó ötlet először meggyőződni arról, hogy a parancsod tartalmazza az összes olyan fájlt, amelyet az összevont fájlban akarsz látni, és nem másokat – különösen, ha olyan jokert használsz, mint a “*”. És ne feledje, hogy az egyesített fájlok továbbra is különálló fájlokként fognak létezni, amelyeket az egyesítés ellenőrzése után esetleg törölni szeretne.

Fájlok egyesítése kor szerint

Ha nem a fájlnevek, hanem az egyes fájlok kora alapján szeretné egyesíteni a fájlokat, használjon egy ehhez hasonló parancsot:

$ for file in `ls -tr myfile.*`; do cat $file >> BigFile.$$; done

A -tr opció (t=time, r=reverse) használatával a fájlok listáját a legidősebb-első kor szerinti sorrendben kapja. Ez hasznos lehet például akkor, ha bizonyos tevékenységekről naplót vezet, és azt szeretné, hogy a tartalom a tevékenységek elvégzésének sorrendjében kerüljön hozzá.

A fenti parancsban szereplő $$ a parancs futtatásakor a folyamat azonosítóját jelenti. Teljesen felesleges ezt használni, de szinte lehetetlenné teszi, hogy véletlenül egy meglévő fájl végére adjon hozzá, ahelyett, hogy újat hozna létre. Ha a $$-t használja, az eredményül kapott fájl így nézhet ki:

$ ls -l BigFile.*-rw-rw-r-- 1 justme justme 931725 Aug 6 12:36 BigFile.582914

Fájlok egyesítése és rendezése

A Linux néhány érdekes lehetőséget biztosít a fájlok tartalmának rendezésére az egyesítés előtt vagy után.

Tartalom rendezése ábécé szerint

Ha azt szeretné, hogy az egyesített fájlok tartalma rendezett legyen, akkor a teljes tartalmat egy ilyen paranccsal rendezheti:

$ cat myfile.1 myfile.2 myfile.3 | sort > newfile

Ha a tartalmat fájlonként csoportosítva szeretné tartani, akkor az egyes fájlokat az új fájlhoz való hozzáadás előtt rendezze az egyes fájlokat egy ilyen paranccsal:

$ for file in `ls myfile.?`; do sort $file >> newfile; done

Fájlok numerikus rendezése

A fájlok tartalmának numerikus rendezéséhez használja a -n kapcsolót a sort kapcsolóval. Ez az opció csak akkor hasznos, ha a fájlok sorai számokkal kezdődnek. Ne feledje, hogy az alapértelmezett sorrendben a “02” kisebbnek számítana, mint az “1”. A -n opciót akkor használja, ha biztosítani szeretné, hogy a sorok numerikus sorrendben legyenek rendezve.

$ cat myfile.1 myfile.2 myfile.3 | sort -n > xyz

A -n opcióval a fájlok tartalmát dátum szerint is rendezheti, ha a fájlok sorai olyan formátumú dátumokkal kezdődnek, mint “2020-11-03” vagy “2020/11/03” (év, hónap, nap formátum). A más formátumú dátumok szerinti rendezés trükkös lesz, és sokkal összetettebb parancsokat igényel.

A beillesztés használata

A beillesztés parancs lehetővé teszi, hogy a fájlok tartalmát soronként egyesítse. Ha ezt a parancsot használja, az egyesített fájl első sora tartalmazza az egyesített fájlok első sorát. Íme egy példa, amelyben nagybetűket használtam, hogy könnyen látható legyen, honnan származnak a sorok:

$ cat file.aA oneA twoA three$ paste file.a file.b file.cA one B one C oneA two B two C twoA three B three C thee B four C four C five

A kimenet átirányítása egy másik fájlba a mentéshez:

$ paste file.a file.b file.c > merged_content

Változatlanul úgy is összeilleszthet fájlokat, hogy az egyes fájlok tartalma egyetlen sorban egyesül. Ehhez a -s (szekvenciális) opció használata szükséges. Figyelje meg, hogy a kimenet ezúttal az egyes fájlok tartalmát mutatja:

$ paste -s file.a file.b file.cA one A two A threeB one B two B three B fourC one C two C thee C four C five

A join

A fájlok összevonására szolgáló másik parancs a join. A join parancs lehetővé teszi több fájl tartalmának összevonását egy közös mező alapján. Például lehet, hogy van egy fájl, amely munkatársak egy csoportjának telefonszámait tartalmazza, és egy másik, amely a munkatársak személyes e-mail címeit tartalmazza, és mindkettő az egyének neve alapján van felsorolva. Az egyesítéssel létrehozhat egy olyan fájlt, amely mind a telefonszámokat, mind az e-mail címeket tartalmazza.

Egy fontos korlátozás, hogy a fájlok sorainak azonos sorrendben kell szerepelniük, és mindegyik fájlban tartalmazniuk kell az egyesítő mezőt.

Íme egy példaparancs:

$ join phone_numbers email_addressesSandra 555-456-1234 [email protected] 555-540-5405John 555-333-1234 [email protected] 555-123-4567 [email protected]

Ebben a példában az első mezőnek (keresztnevek) mindkét fájlban léteznie kell, még akkor is, ha a további információk hiányoznak, különben a parancs hibaüzenetet fog adni. A tartalom rendezése hasznos és valószínűleg sokkal könnyebben kezelhető, de nem szükséges, amíg a sorrend következetes.

Wrap-Up

A Linuxon számos lehetőséged van a különálló fájlokban tárolt adatok összevonására és rendezésére. A választási lehetőségek meglepően egyszerűvé tehetnek néhány egyébként fárasztó feladatot.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.