Comment utiliser: “ comme awk séparateur de champ?
Compte tenu de commande suivante:
echo "1: " | awk '/1/-F ":" {print $1}'
pourquoi est-ce que awk sortie:
1:
Vous devez vous connecter pour publier un commentaire.
Compte tenu de commande suivante:
echo "1: " | awk '/1/-F ":" {print $1}'
pourquoi est-ce que awk sortie:
1:
Vous devez vous connecter pour publier un commentaire.
"-F" est un argument de ligne de commande de ne pas awk syntaxe, essayez:
Si vous voulez le faire par programmation, vous pouvez utiliser le
FS
variable:Noter que si vous changer dans la boucle principale, plutôt que de la
BEGIN
de la boucle, il prend effet pour la prochaine ligne lire dans, depuis la ligne courante a déjà été partagé.Vous avez plusieurs façons de définir
:
comme séparateur:Elles sont toutes équivalentes et pour une sera de retour
1
pour un échantillon d'entrée "1:2:3":BEGIN
déclaration serait plus correct (en étant compatible avec l'ensemble de laawk
syntaxe).BEGIN
si j'utilise un fichier pour stocker l'ensemble de la chose, tandis que-F
vient dans maniable avec one-liners.awk 'BEGIN{print split("foo:bar",a)}' FS=":" file
etawk 'BEGIN{FS=":"; print split("foo:bar",a)}' file
-F
est un argument deawk
lui-même:Vous pouvez également utiliser une regex comme un séparateur de champ, les règles suivantes s'imprimer "de la barre" à l'aide d'une regex pour définir le nombre "10" comme séparateur.
AWK fonctionne comme texte interprète qui va linewise pour l'ensemble du document et qui va fieldwise pour chaque ligne donc $1,$2..$n sont des références pour les champs de chaque ligne($1 est le premier champ,$2 est le deuxième champ et ainsi de suite...).
Vous pouvez définir un séparateur de champ en utilisant l'option "-F" passer sous la ligne de commande ou dans un délai de deux supports avec "FS=...".
Considérons maintenant la réponse de "M" :
Au-dessus du terrain les limites sont définies par des ":" nous avons donc deux champs de 1 $qui est "1" et de 2 $qui EST l'espace vide.Après, vient l'expression régulière "/1/" qui indique le filtre à la sortie de la première zone que lorsque l'interprète tombe sur une ligne contenant une telle expression(je veux dire, 1);
La sortie de la commande "echo" est une ligne qui contient "1" si le filtre fonctionne...
Lorsque vous traitez avec l'exemple suivant :
La syntaxe est en désordre et la interprète a choisi d'ignorer la partie F ":"
et passe à la valeur par défaut du champ séparateur qui est l'espace vide ainsi de la sortie "1:" comme le premier champ et il n'y aura pas un deuxième champ!
La réponse de JUERGEN contient la bonne syntaxe...
Pas Besoin d'écrire tout cela. Il suffit de mettre votre champ souhaité séparateur avec l'option-F dans awk commande et le numéro de la colonne que vous souhaitez imprimer distincts selon vos mentionné séparateur de champ.
Ou vous pouvez utiliser:
C'est vraiment drôle d'équation.
/1/
veux dire?