Následuje několik scénářů, ve kterých může být nutné odebrání mezer:
- Přeformátovat zdrojový kód
- Vyčištění dat
- Pro zjednodušení výstupů z příkazového řádku
Je možné odstranit mezery ručně, pokud soubor obsahuje pouze několik řádků. U souboru obsahujícího stovky řádků však bude obtížné ručně odstranit všechny prázdné znaky. K tomuto účelu jsou k dispozici různé nástroje příkazového řádku, včetně sed, awk, cut a tr. Mezi těmito nástroji je awk jedním z nejsilnějších příkazů.
Co je to awk?
Awk je výkonný a užitečný skriptovací jazyk používaný při manipulaci s textem a generování zpráv. Příkaz awk je zkrácen pomocí iniciál každého z lidí (Aho, Weinberger a Kernighan), kteří jej vyvinuli. Awk umožňuje definovat proměnné, číselné funkce, řetězce a aritmetické operátory; vytvářet formátované zprávy; a více.
Tento článek vysvětluje použití příkazu awk pro ořezávání mezer. Po přečtení tohoto článku se naučíte, jak pomocí příkazu awk provádět následující:
- Ořízněte všechny mezery v souboru
- Ořízněte přední bílé mezery
- Ořízněte koncové mezery
- Ořízněte přední i koncové mezery
- Nahraďte více mezer jednou mezerou
Příkazy v tomto článku byly provedeny na systému Ubuntu 20.04 Systém Focal Fossa. Stejné příkazy však lze provádět i na jiných distribucích Linuxu. Ke spuštění příkazů v tomto článku použijeme výchozí aplikaci Terminál Ubuntu. K terminálu se dostanete pomocí klávesové zkratky Ctrl + Alt + T.
Pro demonstrační účely použijeme ukázkový soubor s názvem „sample“.txt.“K provedení příkladů uvedených v tomto článku.
Zobrazit všechny mezery v souboru
Chcete-li zobrazit všechny mezery v souboru, přepněte výstup příkazu cat do příkazu tr, a to následujícím způsobem:
$ vzorek kočky.txt | tr "" "*" | tr "\ t" "&"Tento příkaz nahradí všechny mezery v daném souboru znakem (*). Po zadání tohoto příkazu budete jasně vidět, kde jsou v souboru všechny bílé mezery (včetně úvodních i koncových mezer).
Znaky * na následujícím snímku obrazovky ukazují, kde jsou v ukázkovém souboru všechny mezery. Jeden * představuje jeden prázdný znak.
Ořízněte všechny prázdné znaky
Chcete-li ze souboru odebrat všechny prázdné znaky, zadejte příkaz out of cat do příkazu awk následujícím způsobem:
$ vzorek kočky.txt | awk 'gsub (/ /, ""); tisk 'Kde
- gsub (zkratka pro globální substituci) je substituční funkce
- / / představují prázdné místo
- „“ nepředstavuje nic (ořízněte řetězec)
Výše uvedený příkaz nahradí všechny mezery (/ /) ničím („“).
Na následujícím snímku obrazovky vidíte, že z výstupu byly odebrány všechny mezery, včetně počátečních a koncových mezer.
Ořízněte přední mezery
Chcete-li ze souboru odebrat pouze úvodní mezery, zadejte příkaz out of cat do příkazu awk následujícím způsobem:
$ vzorek kočky.txt | awk 'sub (/ ^ [\ t] + /, ""); tisk 'Kde
- sub je substituční funkce
- ^ představuje začátek řetězce
- [\ t]+ představuje jeden nebo více mezer
- „“ nepředstavuje nic (ořízněte řetězec)
Výše uvedený příkaz nahradí jednu nebo více mezer na začátku řetězce (^ [\ t] +) ničím („“), aby odstranil úvodní mezery.
Na následujícím snímku obrazovky vidíte, že z výstupu byly odebrány všechny mezery bílé.
Pomocí následujícího příkazu můžete ověřit, že výše uvedený příkaz odstranil úvodní prázdné znaky:
$ vzorek kočky.txt | awk 'sub (/ ^ [\ t] + /, ""); tisk '| tr "" "*" |tr "\ t" "&"
Na níže uvedeném snímku obrazovky je jasně vidět, že byly odstraněny pouze přední bílé mezery.
Oříznout koncové mezery
Chcete-li ze souboru odebrat pouze koncové mezery, zadejte příkaz out of cat do příkazu awk následujícím způsobem:
$ vzorek kočky.txt | awk 'sub (/ [\ t] + $ /, ""); tisk 'Kde
- sub je substituční funkce
- [\ t]+ představuje jeden nebo více mezer
- $ představuje konec řetězce
- „“ nepředstavuje nic (ořízněte řetězec)
Výše uvedený příkaz nahradí jednu nebo více mezer na konci řetězce ([\ t] + $) ničím („“), aby odstranil koncové mezery.
Pomocí následujícího příkazu můžete ověřit, že výše uvedený příkaz odstranil koncové mezery:
$ vzorek kočky.txt | awk 'sub (/ [\ t] + $ /, ""); tisk '| tr "" "*" | tr "\ t" "&"Z níže uvedeného snímku obrazovky je jasně vidět, že byly odstraněny koncové mezery.
Ořízněte přední i koncové mezery
Chcete-li ze souboru odebrat úvodní i koncové mezery, zadejte příkaz out of cat do příkazu awk následujícím způsobem:
$ vzorek kočky.txt | awk 'gsub (/ ^ [\ t] + | [\ t] + $ /, ""); tisk 'Kde
- gsub je globální substituční funkce
- ^ [\ t]+ představuje přední mezery
- [\ t] + $ představuje koncové mezery
- „“ nepředstavuje nic (ořízněte řetězec)
Výše uvedený příkaz nahradí přední i zadní mezeru (^ [\ t]+ [\ t] + $) a nic („“) k jejich odstranění.
Chcete-li zjistit, zda výše uvedený příkaz odstranil úvodní i koncové mezery v souboru, použijte následující příkaz:
$ vzorek kočky.txt | awk 'gsub (/ ^ [\ t] + | [\ t] + $ /, ""); tisk '|tr "" "*" | tr "\ t" "&"
Z níže uvedeného snímku obrazovky je jasně viditelné, že byly odstraněny jak přední, tak i zadní mezery a mezi řetězci zůstanou pouze mezery.
Nahraďte více prostorů jedním prostorem
Chcete-li nahradit více mezer jednou mezerou, zadejte příkaz out of cat do příkazu awk následujícím způsobem:
$ vzorek kočky.txt | awk 'gsub (/ [] + /, ""); tisk 'Kde:
- gsub je globální substituční funkce
- []+ představuje jeden nebo více mezer
- „“ představuje jedno prázdné místo
Výše uvedený příkaz nahradí více mezer ([] +) jedním prázdným znakem („“).
Pomocí následujícího příkazu můžete ověřit, že výše uvedený příkaz nahradil více mezer mezerami:
$ vzorek kočky.txt | awk 'sub (/ [\ t] + $ /, ""); tisk '| | tr "" "*" | tr "\ t" "&"V našem ukázkovém souboru bylo více mezer. Jak vidíte, více mezer v ukázce.Soubor txt byl nahrazen jedním prázdným místem pomocí příkazu awk.
Chcete-li ořezat mezery pouze v těch řádcích, které obsahují konkrétní znak, například čárku, dvojtečku nebo středník, použijte příkaz awk s -F oddělovač vstupu.
Například níže je ukázkový náš soubor, který obsahuje mezery v každém řádku.
Chcete-li odstranit prázdné znaky pouze z řádků, které obsahují čárku (,), bude příkaz vypadat takto:
$ kočka vzorek 1.txt | awk -F, '/, / gsub (/ /, ""); tisk'Kde (-F,) je oddělovač vstupního pole.
Výše uvedený příkaz odstraní a zobrazí pouze mezery z řádků, které v nich obsahují zadaný znak (,). Zbytek řádků zůstane nedotčen.
Závěr
To je vše, co potřebujete vědět, abyste ořízli mezery ve svých datech pomocí příkazu awk. Odebrání mezer z vašich dat může být nutné z několika různých důvodů. Ať už je důvod jakýkoli, můžete všechny bílé mezery ve svých datech snadno oříznout pomocí příkazů popsaných v tomto článku. Můžete dokonce oříznout mezery na začátku nebo na konci, oříznout mezery na začátku i na konci a nahradit více mezer jedním mezerou pomocí příkazu awk.