Välj en godtycklig kolumn med text i UNIX

UNIX har underbart kraftfulla textbehandlingskapacitet. Det finns många sätt att lösa samma problem. Ofta är det nödvändigt att extrahera en enda kolumn med data från en textfil eller en utgångsström. Detta tech-recept kommer att presentera flera lösningar på detta problem.


Många datafiler har datafält avgränsade av ett enda tecken som en flik eller kolon. För att extrahera fältet fullständigt namn från / etc / passwd, används det femte kolonavgränsade fältet:

cut -d: -f 5 / etc / passwd

Snittkommandot ger stor flexibilitet vid skärning av data. I det här fallet -d: styr skuren för att använda en kolon tecken som avgränsare. De -f 5 Parameter direkt sänks för att extrahera endast femte fältet. Fältparametern gör skärmen extremt flexibel. Andra exempel är -f 2-5 att extrahera fält 2 till 5, -f 1,3,7 att extrahera den första, tredje och sjunde fältet.

För att extrahera en fast uppsättning kolumner, till exempel kolumnnummer 44 till 49 från en lång kataloglista (ls -l), använd följande kommando:

ls-l | klippa -c 44-49

På många UNIX-system representerar dessa kolumner modifieringsdatumet. Precis som -f-parametern kan -c-parametern acceptera alternativa värden som -c 5,7,6,8 kommer att presentera dessa karaktärspositioner i den ordningen.

En av de smärre kolonnuttagningarna innebär att en variabel mängd blankutrymme finns mellan fält. För att extrahera processidentifieringsfältet (andra) från en processlista (ps -ef), kommer skärningen inte att fungera. En annan kraftfull textmanipulator i UNIX är awk som förstår att flera mellanslag ska räknas som en enda blankutrymme. För att extrahera pid från en ps -ef, använd:

ps -ef | huvud | awk '{print $ 2}'

Awk är ett otroligt kraftfullt verktyg, och det här är en trivial men användbar tillämpning av den.