Slučování a třídění souborů v Linuxu

, Author

V Linuxu existuje řada způsobů, jak slučovat a třídit textové soubory, ale postup závisí na tom, čeho chcete dosáhnout – zda chcete jednoduše vložit obsah více souborů do jednoho velkého souboru, nebo jej uspořádat nějakým způsobem, který usnadní jeho používání. V tomto příspěvku se podíváme na některé příkazy pro třídění a slučování obsahu souborů a zaměříme se na to, jak se liší výsledky.

Použití příkazu cat

Pokud chcete pouze spojit skupinu souborů do jednoho souboru, je příkaz cat snadnou volbou. Stačí napsat příkaz „cat“ a poté vypsat soubory na příkazovém řádku v pořadí, v jakém je chcete zahrnout do sloučeného souboru. Výstup příkazu přesměrujte do souboru, který chcete vytvořit. Pokud soubor se zadaným názvem již existuje, bude přepsán tím, který vytváříte. Například:

$ cat firstfile secondfile thirdfile > newfile

Pokud chcete obsah řady souborů přidat do existujícího souboru, místo abyste jej přepsali, stačí změnit > na >>.

$ cat firstfile secondfile thirdfile >> updated_file

Pokud se slučované soubory řídí nějakou vhodnou konvencí pojmenování, může být úloha ještě jednodušší. Nebudete muset uvádět všechny názvy souborů, pokud je můžete zadat pomocí regulárního výrazu. Pokud například všechny soubory končí slovem „file“ jako ve výše uvedeném příkladu, můžete postupovat takto:

$ cat *file > allfiles

Všimněte si, že výše uvedený příkaz přidá obsah souborů v alfanumerickém pořadí. V systému Linux by se soubor s názvem „filea“ přidal před soubor s názvem „fileA“, ale za soubor s názvem „file7“. Koneckonců při práci s alfanumerickou posloupností nemusíme myslet jen na „ABCDE“, ale i na „0123456789aAbBcCdDeE“. Vždy můžete použít příkaz jako „ls *soubor“, abyste si před sloučením souborů prohlédli pořadí, v jakém budou soubory přidány.

POZNÁMKA: Je dobré se nejprve ujistit, že váš příkaz obsahuje všechny soubory, které chcete mít ve sloučeném souboru, a žádné jiné – zejména pokud používáte zástupný znak jako „*“. A nezapomeňte, že sloučené soubory budou stále existovat jako samostatné soubory, které budete chtít po ověření sloučení odstranit.

Sloučení souborů podle stáří

Pokud chcete sloučit soubory na základě stáří jednotlivých souborů a ne podle jejich názvů, použijte příkaz, jako je tento:

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

Použitím volby -tr (t=čas, r=obráceně) vznikne seznam souborů v pořadí podle nejstaršího a prvního stáří. To může být užitečné například v případě, že vedete protokol určitých činností a chcete, aby byl obsah přidáván v pořadí, v jakém byly činnosti prováděny.

Příkaz $$ ve výše uvedeném příkazu představuje ID procesu při jeho spuštění. Jeho použití je zcela zbytečné, ale téměř znemožňuje, abyste nechtěně přidali na konec existujícího souboru místo vytvoření nového. Pokud použijete $$, výsledný soubor může vypadat takto:

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

Slučování a třídění souborů

Linux nabízí několik zajímavých způsobů, jak seřadit obsah souborů před nebo po sloučení.

Třídění obsahu podle abecedy

Pokud chcete, aby byl obsah sloučeného souboru seřazen, můžete celkový obsah seřadit příkazem, jako je tento:

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

Pokud chcete zachovat obsah seskupený podle souborů, seřaďte každý soubor před přidáním do nového souboru příkazem, jako je tento:

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

Třídění souborů číselně

Chcete-li obsah souborů seřadit číselně, použijte volbu -n s příkazem sort. Tato volba je užitečná pouze v případě, že řádky v souborech začínají čísly. Mějte na paměti, že při výchozím řazení by číslo „02“ bylo považováno za menší než číslo „1“. Volbu -n použijte, pokud chcete zajistit, aby byly řádky seřazeny v číselném pořadí.

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

Volba -n také umožňuje seřadit obsah souborů podle data, pokud řádky v souborech začínají daty ve formátu „2020-11-03“ nebo „2020/11/03“ (formát rok, měsíc, den). Třídění podle dat v jiných formátech bude složité a bude vyžadovat mnohem složitější příkazy.

Použití příkazu paste

Příkaz paste umožňuje spojovat obsah souborů po řádcích. Při použití tohoto příkazu bude první řádek sloučeného souboru obsahovat první řádek každého ze sloučených souborů. Zde je příklad, ve kterém jsem použil velká písmena, aby bylo snadno vidět, odkud jednotlivé řádky pocházejí:

$ 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

Přesměrování výstupu do jiného souboru pro jeho uložení:

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

Alternativně můžete vkládat soubory dohromady tak, že obsah každého souboru bude spojen do jednoho řádku. To vyžaduje použití volby -s (sekvenční). Všimněte si, že výstup tentokrát zobrazuje obsah každého souboru:

$ 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

Použití příkazu join

Dalším příkazem pro spojování souborů je příkaz join. Příkaz join umožňuje sloučit obsah více souborů na základě společného pole. Například můžete mít jeden soubor, který obsahuje telefonní čísla skupiny spolupracovníků, a druhý, který obsahuje jejich osobní e-mailové adresy a oba jsou uvedeny podle jmen osob. Pomocí příkazu join můžete vytvořit soubor s telefonními čísly i e-mailovými adresami.

Jedním důležitým omezením je, že soubory musí mít řádky uvedené ve stejném pořadí a musí obsahovat pole join v každém souboru.

Uvedeme příklad příkazu:

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

V tomto příkladu musí první pole (jména) existovat v každém souboru, i když chybí další informace, jinak příkaz selže s chybou. Seřazení obsahu je užitečné a pravděpodobně se s ním mnohem lépe pracuje, ale není nutné, pokud je pořadí konzistentní.

Zabalit

V systému Linux máte mnoho možností, jak sloučit a seřadit data uložená v samostatných souborech. Tyto volby mohou překvapivě usnadnit některé jinak zdlouhavé úkoly.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.