V dnešním tutoriálu o správě souborů v Linuxu se podíváme na platné přístupy ke spojení více řádků v souboru do jednoho řádku. Na konci tohoto článku přidáte do svých zkušeností se správou souborů v Linuxu několik počítačových milníků.
[ Také by se vám mohlo líbit:Jak spojit dva textové soubory v Linuxu ]
Možnosti/příležitosti pro uživatele využívající operační systém Linux prostřednictvím rozhraní příkazového řádku jsou i nadále nekonečné. Jednou z takových možností je manipulace s víceřádkovým souborem do jednořádkového souboru pomocí řady linuxových příkazů. Cíl pro sloučení takových řádků může být tak jednoduchý jako potřeba přidat do cílového souboru vlastní oddělovače.
Prohlášení o problému
Protože se tento tutoriál zaměří na sloučení více řádků do jednoho řádku v cílovém souboru, musíme vytvořit takový druh souboru pro referenční účely a naplnit jej několika víceřádkovými daty.
$ sudo nano sample_file.txt
Podle snímku obrazovky výše máme co do činění se souborem (sample_file.txt ) se šesti řádky a existují tři způsoby spojení těchto šesti řádků:
- Bez oddělovačů:Já GenuinelyLoveLinuxShellTips Tutorials!
- S jediným oddělovačem znaků:I Genuinely,Love,Linux.Shell,Tips,Cutorials!
- S několika oddělovači znaků:I Genuinely;Love;Linux;Shell;Tipy;Výukové programy!
Jak spojit více řádků do jednoho řádku v souboru
Pojďme se podívat na tyto tři přístupy ke spojení více řádků v souboru do jednoho řádku v Linuxu.
1. Pomocí příkazu sed
Síla sed obslužný program příkazového řádku pro zpracování textu nám umožní spojit šest řádků v našem ukázkovém textovém souboru tím, že se zaměří na výše uvedené tři přístupy s odkazem na téměř stejnou syntaxi kódu.
Bez oddělovačů:
$ sed ':a; N; $!ba; s/\n//g' sample_file.txt
S mezerami:
$ sed ':a; N; $!ba; s/\n/ /g' sample_file.txt
S jedním oddělovačem znaků, např. čárka:
$ sed ':a; N; $!ba; s/\n/,/g' sample_file.txt
S vícenásobným oddělovačem znaků, např. středník a mezera:
$ sed ':a; N; $!ba; s/\n/; /g' sample_file.txt
2. Pomocí příkazu awk
Linux awk command je dalším uznávaným nástrojem příkazového řádku pro zpracování textu. Jeho přístup k řešení našeho víceřádkového až jednořádkového problému lze analyzovat a implementovat následujícím způsobem:
Bez oddělovačů:
$ awk -v d="" '{s=(NR==1?s:s d)$0}END{print s}' sample_file.txt
S mezerami:
$ awk -v d=" " '{s=(NR==1?s:s d)$0}END{print s}' sample_file.txt
S jedním oddělovačem znaků, např. čárka:
$ awk -v d="," '{s=(NR==1?s:s d)$0}END{print s}' sample_file.txt
S vícenásobným oddělovačem znaků, např. středník a mezera:
$ awk -v d="; " '{s=(NR==1?s:s d)$0}END{print s}' sample_file.txt
3. Pomocí příkazu vložit
Vložit příkaz je ideální pouze pro spojování více řádků bez oddělovačů, s mezerami a s jedním oddělovačem znaků. Tento nástroj je umístěn pod GNU Coreutils Balíček je proto dostupný ve všech distribucích operačního systému Linux.
Bez oddělovačů:
$ paste -sd '' sample_file.txt
S mezerami:
$ paste -sd ' ' sample_file.txt
S jedním oddělovačem znaků, např. podtržítko:
$ paste -sd '_' sample_file.txt
Koncové podtržítko (_)
lze odstranit převedením příkazu paste do příkazu sed:
$ paste -sd '_' sample_file.txt | sed 's/_$/\n/'
Tento přístup není ideální s více oddělovači znaků, např. středníkem a mezerou, kvůli nepravidelným výstupům, jako je následující:
$ paste -sd '; ' sample_file.txt
4. Pomocí příkazu tr
příkaz tr je také ideální pro spojování více řádků bez oddělovačů, s mezerami a s jedním oddělovačem znaků.
Bez oddělovačů:
$ tr -d '\n' < sample_file.txt
S mezerami:
$ tr '\n' ' ' < sample_file.txt
S jedním oddělovačem znaků, např. čárka:
$ tr '\n' ',' < sample_file.txt
Výstup propojte do příkazu sed, abyste se zbavili přebytečných čárek.
$ tr '\n' ',' < sample_file.txt | sed 's/,,$/\n/'
Úspěšně jsme se naučili, jak spojit více řádků do jednoho řádku v souboru v Linuxu.