Tutoriel Linux

Řezání pod Linuxem: extrakce sloupce bez použití těžkého dělostřelectva

Débutant5 min de lecture
À retenirLinux n'est pas réservé aux experts. Le bon point de départ : une distribution accessible, une sauvegarde propre et quelques commandes comprises.

Máte soubor CSV, výstup příkazu nebo soubor protokolu a chcete načíst pouze jeden sloupec, aniž byste museli psát celý skript? Přesně k tomu je [tento nástroj] určen. střihProces objednávání je jednoduchý, rychlý a velmi pohodlný, když je výchozí formát čistý.

V této příručce vám ukážu, jak používat střih s oddělovačem, jak extrahovat konkrétní znaky a zejména v jakých případech je lepší přepnout na awk Nebo sed. střih Řeže velmi dobře, ale nedetekuje poškozené pilníky.

K čemu slouží příkaz cut v Linuxu?

střih Přečte každý řádek a poté si ponechá pouze požadovanou část. Můžete pracovat po znacích pomocí -C, na bajt s -b, nebo podle polí s -FV praxi je to většinou -F s -d který je nejužitečnější.

cut -d ':' -f 1 /etc/heslo

Zde, -d ':' označuje, že pole jsou oddělena dvojtečkami. -f 1 zeptá se na první pole. Na /etc/hesloZobrazí se názvy lokálních účtů.

Před použitím střih Při zkoumání systémového souboru začněte zobrazením několika řádků. Tím se vyhnete úsudku na základě formátu, který jste neověřili.

head -5 /etc/heslo

Extrakce sloupce s oddělovačem

Nejužitečnější syntaxe vypadá takto:

cut -d 'ODDĚLOVAČ' -f ČÍSLO souboru

Příklad s velmi jednoduchým souborem CSV:

Uživatelé koček.csv
jméno, e-mail, role
alice,[email protected],admin
marc,[email protected],reading

Extrakce druhého sloupce:

cut -d ',' -f 2 uživatelé.csv

Očekávaný výsledek:

e-mail
[email protected]
[email protected]

Můžete také požádat o více polí:

cut -d ',' -f 1,3 uživatelé.csv

Nebo pláž:

cut -d ',' -f 1-2 uživatelé.csv

Pozor: střih Počítá pole od 1, ne od 0. Je to hloupé, ale je to klasický zdroj chyb při přepínání ze skriptovacího jazyka na příkaz shellu.

Práce na výstupu objednávky

střih Zajímavé to začíná být s roure. Jednoduchý příklad: načtení pouze lokálních uživatelských jmen z /etc/heslo.

cat /etc/passwd | cut -d ':' -f 1

Můžeme psát kratší bez kočka :

cut -d ':' -f 1 /etc/heslo

Další příklad: extrakce bodů připojení z čistého výstupu df.

df -h --výstup=zdroj,procento,cíl | konec -n +2

V tomto konkrétním případě, střih není nejlepší volbou, protože sloupce jsou zarovnány s různou roztečí. Pro tento typ výstupu awk je často spolehlivější:

df -h --output=zdroj,procento,cíl | awk 'NR>1 {print $2, $3}'

Toto je limit, který je třeba si pamatovat: střih Funguje to velmi dobře, když je separátor čistý a stabilní. Pokud se rozteč mění v závislosti na délce sloupce, netlačte na něj.

Extrahujte konkrétní znaky

S -CMůžete extrahovat pozice znaků. To je užitečné pro soubory s pevnou šířkou nebo pro rychlou kontrolu prefixu.

echo "prod-server-01" | cut -c 1-7

výsledek:

server

Některé užitečné formuláře:

cut -c 1-5 soubor.txt
cut -c 8- soubor.txt
cut -c -10 soubor.txt

První příkaz ponechá znaky 1 až 5. Druhý ponechá znak 8 až do konce. Třetí ponechá znak 10 od začátku do znaku 10.

Úskalí CSV souborů a mezer

Nejčastějším úskalím jsou skutečné soubory CSV. Pokud sloupec obsahuje čárku mezi uvozovkami, střih Nerozumí logice CSV. Pořád rozděluje na každé čárce.

jméno, komentář
Alice, „administrátorka, plný přístup“

V tomto příkladu střih -d ',' -f 2 Toto neposkytne spolehlivý výsledek. Pro skutečný CSV použijte nástroj, který umí formát číst, například Python, Miller, csvkit nebo procesor přizpůsobený vašemu prostředí.

Další úskalí: výchozí oddělovač střih Pro pole je oddělovačem tabulátor, nikoli mezera. Pokud testujete příkaz s mezerami, zadejte oddělovač explicitně.

echo "web01 produkt aktivní" | cut -d ' ' -f 2

Tento příkaz se vrátí výrobaPokud ale řádek obsahuje několik po sobě jdoucích mezer, střih Také počítá prázdná pole. Opět platí, že awk se často stává čistším.

Užitečný příklad použití protokolů

Na serveru můžete kombinovat journalctl, grep A střih izolovat část řádku. Záměrně jednoduchý příklad: načtení prvních sloupců z exportu.

journalctl -u ssh -n 20 --no-pager | cut -d ' ' -f 1-3

Toto není úplná analýza protokolů, ale může to stačit k rychlé kontrole časů nebo k přípravě krátké zprávy, kterou lze zkopírovat do tiketu. Pro komplexnější diagnózu jsem podrobně popsal použití journalctl při posledním spuštění Linuxu.

Kdy mám přejít na awk místo cut?

Použití střih Když je soubor jednoduchý: jeden oddělovač, stabilní sloupce, potřeba rychlosti. Přepněte na awk když potřebujete filtrovat, vypočítávat, ignorovat řádky, zpracovávat proměnné mezery nebo aplikovat podmínku.

# řez stačí
cut -d ':' -f 1 /etc/heslo

#awk se stává užitečnějším
awk -F ':' '$3 >= 1000 {print $1}' /etc/passwd

Dokumentace o řez (1) podrobně popisuje dostupné možnosti. Pro každodenní použití nezapomeňte především -d, -F A -C.

Moje jednoduché pravidlo: pokud dokážete vysvětlit rozklad v jedné větě, střih je pravděpodobně dostačující. Pokud si začnete v hlavě přidávat výjimky, vezměte si to rovnou awk nebo skutečný scénář. Ztratíte méně času.

sudo apt update && sudo apt upgrade