GNU/Linux >> Znalost Linux >  >> Linux

Co tvoří „pole“ pro příkaz cut?

Termín "pole" je často spojován s nástroji jako cut a awk . Pole by bylo podobné sloupcům v hodnotě dat, pokud data vezmete a oddělíte je pomocí specifického znaku. Typickým znakem, který se k tomu používá, je Mezerník .

Nicméně, jak je tomu u většiny nástrojů, je konfigurovatelný. Například:

  • awk =awk -F"," ... - odděluje se čárkami (tj. , ).
  • cut =cut -d"," ... - odděluje se čárkami (tj. , ).

Příklady

Tento první ukazuje, jak awk automaticky se rozdělí na mezery.

$ echo "The rain in Spain." | awk '{print $1" "$4}'
The Spain.

Tento ukazuje, jak cut rozdělí se také na mezery.

$ echo "The rain in Spain." | cut -d" " -f1,4
The Spain.

Zde máme CSV seznam dat sloupců, které používáme cut vrátíte sloupce 1 a 4.

$ echo "col1,col2,col3,co4" | cut -d"," -f1,4
col1,co4

Awk to také umí:

$ echo "col1,col2,col3,co4" | awk -F"," '{print $1","$4}'
col1,co4

Awk je také o něco zběhlejší v zacházení s různými separačními postavami. Zde se jedná o Tabs spolu s Spaces kde jsou vzájemně smíchány ve stejnou dobu:

$ echo -e "The\t rain\t\t in Spain." | awk '{print $1" "$4}'
The Spain.

A co přepínač -s pro vyjmutí?

S ohledem na tento přepínač jednoduše říká cut netisknout žádné řádky, které neobsahují oddělovací znak zadaný pomocí -d přepínač.

Příklad

Řekněme, že jsme měli tento soubor.

$ cat sample.txt 
This is a space string.
This is a space   and   tab string.
Thisstringcontainsneither.

POZNÁMKA: Ve 2. řetězci výše jsou mezery a tabulátory.

Nyní, když zpracujeme tyto řetězce pomocí cut s a bez -s přepínač:

$ cut -d" " -f1-6 sample.txt 
This is a space string.
This is a space  
Thisstringcontainsneither.

$ cut -d" " -f1-6 -s sample.txt 
This is a space string.
This is a space  

Ve 2. příkladu můžete vidět, že -s switch vynechal z výstupu všechny řetězce, které neobsahují oddělovač Mezerník .


Pole podle POSIX je jakákoli část řádku oddělená kterýmkoli ze znaků v IFS , "oddělovač vstupních polí (nebo vnitřní oddělovač polí )." Výchozí hodnota je mezera, za kterou následuje vodorovný tabulátor, za kterým následuje nový řádek. Pomocí Bash můžete spustit printf '%q\n' "$IFS" abyste viděli jeho hodnotu.


Záleží na příslušném nástroji, ale pro cut , "pole" začíná na začátku řádku textu a zahrnuje vše až po první kartu. Druhé pole běží od znaku za první záložkou až po další záložku. A tak dále pro třetí, čtvrtý, ... Vše mezi tabulátory nebo mezi začátkem řádku a tabulátorem nebo mezi tabulátorem a koncem řádku.

Pokud nezadáte oddělovač pole s volbou "-d":cut -d: -f2 dostanete vše mezi první a druhou dvojtečkou (':') znaky.

Jiné nástroje mají různé definice, ale znak tabulátoru je běžný. awk je dobrý návrat, pokud cut je příliš striktní, jako awk rozděluje pole na základě jednoho nebo více bílých znaků. To je v mnoha situacích trochu přirozenější, ale musíte znát trochu syntaxe. Chcete-li vytisknout druhé pole podle awk :

awk '{print $2}'

sort je ten, který mě podvádí. Moje aktuální sort manuálová stránka říká něco jako "neprázdný přechod na prázdný" pro oddělovač polí. Z nějakého důvodu trvá získání sort několik pokusů správně definovaná pole. join zřejmě používá pole "oddělená mezerami", což je to, co awk ve výchozím nastavení to dělá.

Morálka příběhu je být opatrný a experimentovat, pokud to nevíte.


Linux
  1. Co je stromový příkaz v Ubuntu?

  2. Výchozí oddělovač polí pro awk

  3. Jaký je účel cd ` (backtick)?

  1. Průvodce linuxovým terminálem pro začátečníky

  2. 8 tipů pro příkazový řádek Linuxu

  3. Jaké je použití volby -o v příkazu useradd?

  1. Nala:Prettier Frontend pro APT Command

  2. Co definuje maximální velikost pro jeden příkazový argument?

  3. Need For The `builtin` Builtin?