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.