GNU/Linux >> Tutoriels Linux >  >> Linux

Qu'est-ce qui constitue un 'champ' pour la commande cut ?

Le terme "champ" est souvent associé à des outils tels que cut et awk . Un champ serait similaire à une colonne de données, si vous prenez les données et les séparez à l'aide d'un caractère spécifique. Généralement, le caractère utilisé pour ce faire est un Espace .

Cependant, comme c'est le cas avec la plupart des outils, il est configurable. Par exemple :

  • awk =awk -F"," ... - séparerait par des virgules (c'est-à-dire , ).
  • couper =cut -d"," ... - séparerait par des virgules (c'est-à-dire , ).

Exemples

Ce premier montre comment awk sera automatiquement divisé sur les espaces.

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

Celui-ci montre comment cut se divisera également sur les espaces.

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

Ici, nous avons une liste CSV de données de colonne que nous utilisons cut pour renvoyer les colonnes 1 et 4.

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

Awk aussi peut le faire :

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

Awk est également un peu plus apte à gérer une variété de caractères de séparation. Ici, il s'agit de Tabs avec Espaces où ils sont mélangés en même temps :

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

Qu'en est-il du commutateur -s pour couper ?

En ce qui concerne ce commutateur, il indique simplement cut pour ne pas imprimer les lignes qui ne contiennent pas le caractère délimiteur spécifié via le -d commutateur.

Exemple

Supposons que nous ayons ce fichier.

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

REMARQUE : Il y a des espaces et des tabulations dans la 2ème chaîne ci-dessus.

Maintenant, lorsque nous traitons ces chaînes en utilisant cut avec et sans le -s commutateur :

$ 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  

Dans le 2ème exemple vous pouvez voir que le -s switch a omis toutes les chaînes de la sortie qui ne contiennent pas le délimiteur, Espace .


Un champ selon POSIX est toute partie d'une ligne délimitée par l'un des caractères de IFS , le "séparateur de champ de saisie (ou séparateur de champ interne )." La valeur par défaut de ceci est un espace, suivi d'une tabulation horizontale, suivi d'une nouvelle ligne. Avec Bash, vous pouvez exécuter printf '%q\n' "$IFS" pour voir sa valeur.


Cela dépend de l'utilitaire en question, mais pour cut , un "champ" commence au début d'une ligne de texte et inclut tout jusqu'au premier onglet. Le deuxième champ va du caractère après la première tabulation jusqu'à la tabulation suivante. Et ainsi de suite pour le troisième, le quatrième, ... Tout entre les onglets, ou entre le début de ligne et l'onglet, ou entre l'onglet et la fin de ligne.

Sauf si vous spécifiez un délimiteur de champ avec l'option "-d" :cut -d: -f2 vous obtiendriez tout entre les premiers et deuxièmes caractères deux-points (':').

D'autres utilitaires ont des définitions différentes, mais un caractère de tabulation est courant. awk est une bonne solution de repli si cut est trop strict, comme awk divise les champs en fonction d'un ou plusieurs caractères d'espacement. C'est un peu plus naturel dans beaucoup de situations, mais vous devez connaître un peu la syntaxe. Pour imprimer le deuxième champ selon awk :

awk '{print $2}'

sort est celui qui me trompe. Mon sort actuel La page de manuel indique quelque chose comme "transition non vide à vide" pour un séparateur de champs. Pour une raison quelconque, il faut quelques essais pour obtenir sort champs définis correctement. join utilise apparemment des champs "délimités par des espaces", ce que awk prétend faire par défaut.

La morale de l'histoire est d'être prudent et d'expérimenter si vous ne savez pas.


Linux
  1. Un guide du terminal Linux pour les débutants

  2. 8 conseils pour la ligne de commande Linux

  3. Nala :une interface plus jolie pour la commande APT

  4. Séparateur de champ par défaut pour awk

  5. A quoi sert la commande hostnamectl ?

Conseils pour utiliser la commande top sous Linux

3 gestionnaires de mots de passe pour la ligne de commande Linux

Qu'est-ce que la commande Linux Watch + Exemples

Le didacticiel de commande fc avec des exemples pour les débutants

Besoin du "builtin" intégré ?

Qu'est-ce que la commande kill sous Linux ?