GNU/Linux >> Linux Esercitazione >  >> Linux

Cosa costituisce un "campo" per il comando cut?

Il termine "campo" è spesso associato a strumenti come cut e awk . Un campo sarebbe simile a una colonna di dati, se prendi i dati e li separi usando un carattere specifico. Tipicamente il carattere usato per fare questo è uno Spazio .

Tuttavia, come nel caso della maggior parte degli strumenti, è configurabile. Ad esempio:

  • awk =awk -F"," ... - sarebbe separato da virgole (ad es. , ).
  • taglio =cut -d"," ... - sarebbe separato da virgole (ad es. , ).

Esempi

Questo primo mostra come awk automaticamente si dividerà sugli spazi.

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

Questo mostra come cut si dividerà anche sugli spazi.

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

Qui abbiamo un elenco CSV di dati di colonna che stiamo usando cut per restituire le colonne 1 e 4.

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

Anche Awk può farlo:

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

Awk è anche un po' più abile nell'affrontare una varietà di caratteri di separazione. Qui si tratta di Tabulazioni insieme a Spazi dove sono mescolati contemporaneamente:

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

E l'opzione -s per tagliare?

Per quanto riguarda questo interruttore, dice semplicemente cut per non stampare alcuna riga che non contenga il carattere delimitatore specificato tramite -d interruttore.

Esempio

Diciamo che abbiamo questo file.

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

NOTA: Ci sono spazi e tabulazioni nella seconda stringa sopra.

Ora quando elaboriamo queste stringhe usando cut con e senza -s interruttore:

$ 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  

Nel secondo esempio puoi vedere che -s switch ha omesso qualsiasi stringa dall'output che non contenga il delimitatore, Spazio .


Un campo secondo POSIX è qualsiasi parte di una riga delimitata da uno qualsiasi dei caratteri in IFS , il "separatore del campo di input (o separatore di campo interno )." Il valore predefinito di questo è spazio, seguito da un tabulatore orizzontale, seguito da una nuova riga. Con Bash puoi eseguire printf '%q\n' "$IFS" per vederne il valore.


Dipende dall'utilità in questione, ma per cut , un "campo" inizia all'inizio di una riga di testo e include tutto fino alla prima scheda. Il secondo campo va dal carattere dopo la prima scheda, fino alla scheda successiva. E così via per la terza, la quarta, ... Tutto tra tabulazioni, o tra inizio riga e tabulazione, o tra tabulazione e fine riga.

A meno che non specifichi un delimitatore di campo con l'opzione "-d":cut -d: -f2 otterrebbe tutto tra il primo e il secondo carattere dei due punti (':').

Altre utilità hanno definizioni diverse, ma un carattere di tabulazione è comune. awk è un buon fallback se cut è troppo rigido, come awk divide i campi in base a uno o più spazi bianchi. È un po' più naturale in molte situazioni, ma devi conoscere un po' di sintassi. Per stampare il secondo campo secondo awk :

awk '{print $2}'

sort è quello che mi inganna. Il mio attuale sort la pagina man dice qualcosa come "transizione da vuoto a vuoto" per un separatore di campo. Per qualche ragione ci vogliono alcuni tentativi per ottenere sort campi definiti correttamente. join apparentemente utilizza campi "delimitati da spazi bianchi", che è ciò che awk pretende di fare per impostazione predefinita.

La morale della storia è stare attenti e sperimentare se non lo sai.


Linux
  1. Una guida al terminale Linux per principianti

  2. Nala:un frontend più carino per il comando APT

  3. Qual è il comando albero in Ubuntu?

  4. Qual è lo scopo di cd ` (backtick)?

  5. Qual è l'uso dell'opzione -o nel comando useradd?

Suggerimenti per l'utilizzo del comando top in Linux

3 gestori di password per la riga di comando di Linux

Cos'è il comando Linux Watch + Esempi

Il tutorial del comando fc con esempi per principianti

Necessità del builtin "costruito"?

Qual è il comando kill in Linux?