Slijedi nekoliko scenarija u kojima bi moglo biti potrebno uklanjanje razmaka:
- Za ponovno formatiranje izvornog koda
- Za čišćenje podataka
- Da bi se pojednostavili izlazi naredbenog retka
Moguće je ručno ukloniti razmake ako datoteka sadrži samo nekoliko redaka. Ali, za datoteku koja sadrži stotine redaka, tada će biti teško ručno ukloniti sve razmake. U tu svrhu dostupni su razni alati naredbenog retka, uključujući sed, awk, cut i tr. Među tim alatima awk je jedna od najmoćnijih naredbi.
Što je Awk?
Awk je moćan i koristan skriptni jezik koji se koristi u manipulaciji tekstom i generiranju izvještaja. Naredba awk skraćena je pomoću inicijala svih ljudi (Aho, Weinberger i Kernighan) koji su je razvili. Awk omogućuje definiranje varijabli, numeričkih funkcija, nizova i aritmetičkih operatora; stvoriti formatirana izvješća; i više.
Ovaj članak objašnjava upotrebu naredbe awk za obrezivanje razmaka. Nakon čitanja ovog članka naučit ćete kako pomoću naredbe awk izvršiti sljedeće:
- Izrežite sve razmake u datoteci
- Izrežite vodeće razmake
- Izrežite prazne razmake
- Izrežite bijeli i vodeći razmak
- Zamijenite više razmaka jednim razmakom
Naredbe u ovom članku izvršene su na Ubuntu 20.04 Focal Fossa sustav. Međutim, iste naredbe mogu se izvoditi i na drugim Linux distribucijama. Za pokretanje naredbi u ovom članku koristit ćemo zadanu aplikaciju Ubuntu Terminal. Terminalu možete pristupiti pomoću tipkovne prečice Ctrl + Alt + T.
U demonstracijske svrhe koristit ćemo datoteku uzorka nazvanu „sample.txt.”Za izvođenje primjera iz ovog članka.
Pogledajte sve razmake u datoteci
Da biste vidjeli sve razmake prisutne u datoteci, usmjerite izlaz naredbe cat na naredbu tr, kako slijedi:
$ mačka uzorak.txt | tr "" "*" | tr "\ t" "&"Ova će naredba zamijeniti sve razmake u datoj datoteci znakom (*). Nakon unosa ove naredbe moći ćete jasno vidjeti gdje su svi bijeli prostori (uključujući vodeće i prateće bijele prostore) prisutni u datoteci.
Znakovi * na sljedećem snimku zaslona prikazuju gdje su svi razmaci prisutni u datoteci uzorka. Pojedinačni * predstavlja jedan razmak.
Izrežite sve razmake
Da biste uklonili sve razmake iz datoteke, prenesite naredbu out of cat u naredbu awk, kako slijedi:
$ mačka uzorak.txt | awk 'gsub (/ /, ""); ispisGdje
- gsub (označava globalnu supstituciju) je funkcija supstitucije
- / / predstavljaju bijeli prostor
- "" ne predstavlja ništa (obrezati niz)
Gornja naredba zamjenjuje sve razmake (/ /) ničim (“”).
Na sljedećem snimku zaslona možete vidjeti da su svi razmaci, uključujući vodeći i prateći razmak, uklonjeni iz rezultata.
Izrežite vodeće razmake
Da biste iz datoteke uklonili samo vodeće razmake, prenesite naredbu out of cat u naredbu awk, kako slijedi:
$ mačka uzorak.txt | awk 'pod (/ ^ [\ t] + /, ""); ispis 'Gdje
- pod je supstitucijska funkcija
- ^ predstavlja početak niza
- [\ t]+ predstavlja jedan ili više prostora
- "" ne predstavlja ništa (obrezati niz)
Gornja naredba zamjenjuje jedan ili više razmaka na početku niza (^ [\ t] +) ničim (“”) za uklanjanje vodećih razmaka.
Na sljedećem snimku zaslona možete vidjeti da su svi vodeći razmaci uklonjeni iz rezultata.
Sljedećom naredbom možete provjeriti je li gornja naredba uklonila vodeće razmake:
$ mačka uzorak.txt | awk 'pod (/ ^ [\ t] + /, ""); ispis '| tr "" "*" |tr "\ t" "&"
Na snimci zaslona u nastavku jasno je vidljivo da su uklonjeni samo vodeći razmaci.
Trim prateći razmaci
Da biste iz datoteke uklonili samo prateće razmake, prenesite naredbu out of cat u naredbu awk, kako slijedi:
$ mačka uzorak.txt | awk 'sub (/ [\ t] + $ /, ""); ispisGdje
- pod je supstitucijska funkcija
- [\ t]+ predstavlja jedan ili više prostora
- $ predstavlja kraj niza
- "" ne predstavlja ništa (obrezati niz)
Gornja naredba zamjenjuje jedan ili više razmaka na kraju niza ([\ t] + $) ničim ("") za uklanjanje pratećih razmaka.
Sljedećom naredbom možete provjeriti je li gornja naredba uklonila prateće razmake:
$ mačka uzorak.txt | awk 'pod (/ [\ \ t] + $ /, ""); ispis '| tr "" "*" | tr "\ t" "&"Sa donje slike zaslona jasno je vidljivo da su uklonjeni razmaci koji su zaostali.
Izrežite vodeći i prateći razmak
Da biste uklonili i vodeći i prateći razmak iz datoteke, prenesite naredbu out of cat u naredbu awk, kako slijedi:
$ mačka uzorak.txt | awk 'gsub (/ ^ [\ t] + | [\ t] + $ /, ""); ispis 'Gdje
- gsub je globalna funkcija supstitucije
- ^ [\ t]+ predstavlja vodeće razmake
- [\ t] + $ predstavlja prateće razmake
- "" ne predstavlja ništa (obrezati niz)
Gornja naredba zamjenjuje i početni i zadnji prostor (^ [\ t]+ [\ t] + $) bez ičega ("") za njihovo uklanjanje.
Da biste utvrdili je li gornja naredba uklonila i vodeći i prateći razmak u datoteci, upotrijebite sljedeću naredbu:
$ mačka uzorak.txt | awk 'gsub (/ ^ [\ t] + | [\ t] + $ /, ""); ispis '|tr "" "*" | tr "\ t" "&"
Iz donjeg snimka zaslona jasno je vidljivo da su uklonjeni i vodeći i prateći razmaci, a ostali su samo razmaci između žica.
Zamijenite više prostora s jednim razmakom
Da biste zamijenili više razmaka s jednim razmakom, prenesite naredbu out of cat u naredbu awk, kako slijedi:
$ mačka uzorak.txt | awk 'gsub (/ [] + /, ""); ispis 'Gdje:
- gsub je globalna funkcija supstitucije
- []+ predstavlja jedan ili više razmaka
- "" predstavlja jedan bijeli prostor
Gornja naredba zamjenjuje više razmaka ([] +) s jednim razmakom (““).
Sljedećom naredbom možete provjeriti je li gornja naredba zamijenila više prostora razmacima:
$ mačka uzorak.txt | awk 'sub (/ [\ t] + $ /, ""); ispis '| | tr "" "*" | tr "\ t" "&"U našoj datoteci uzorka bilo je više razmaka. Kao što vidite, više razmaka u uzorku.txt datoteka je zamijenjena jednim praznim prostorom pomoću naredbe awk.
Da biste obrezali razmake samo u onim linijama koje sadrže određeni znak, poput zareza, dvotočke ili dvotačke, upotrijebite naredbu awk s -F ulazni separator.
Na primjer, dolje je prikazana naša ogledna datoteka koja sadrži razmake u svakom retku.
Da biste uklonili razmake samo iz redaka koji sadrže zarez (,), naredba bi bila sljedeća:
$ mačka uzorak1.txt | awk -F, '/, / gsub (/ /, ""); ispisGdje (-F,) je separator ulaznog polja.
Gornja naredba uklonit će i prikazati samo razmake iz redaka koji u njima sadrže navedeni znak (,). Ostatak redaka ostat će nepromijenjen.
Zaključak
To je sve što trebate znati kako biste izrezali razmake u podacima pomoću naredbe awk. Uklanjanje razmaka iz vaših podataka može biti potrebno iz nekoliko različitih razloga. Bez obzira na razlog, lako možete izrezati sve razmake u podacima pomoću naredbi opisanih u ovom članku. Možete čak i obrezati vodeće ili prateće razmake, obrezati vodeće i prateće razmake, a više razmaka zamijeniti jednim razmakom naredbom awk.