The UNIX and Linux Forums  

Go Back   Les systèmes UNIX et Linux Forums > Top Forums > De programmation et de script Shell
.
google unix.com



De programmation et de script Shell Posez vos questions à propos de KSH, CSH, SH, BASH, PERL, PHP, SED, awk et d'autres scripts shell et les langages de script shell ici.

Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
Fil Thread Starter Forum Réponses Last Post
la façon de lire l'enregistrement à l'enregistrement à partir d'un fichier au format unix raoscb UNIX pour les nuls Questions et réponses 1 05-16-2008 07:30 AM
Script de recherche à un mauvais enregistrement dans un fichier, puis mettre le dossier dans le fichier endommagé shilendrajadon De programmation et de script Shell 2 12-28-2007 10:02 AM
Script de recherche à un mauvais enregistrement dans un fichier, puis mettre le dossier dans le fichier endommagé shilendrajadon UNIX for Advanced & Expert Users 1 12-28-2007 10:00 AM
diviser un enregistrement et l'ajout d'un enregistrement dans un fichier rsolap De programmation et de script Shell 1 08-13-2007 02:58 PM
Sélectionnez le texte correspondant à () bracket cursive UNIX pour les nuls Questions et réponses 4 04-20-2007 03:14 AM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Recherche sur ce Thread Rate Thread Modes d'affichage
  #1 (permalink)  
Old 06-05-2008
synmag synmag is offline
Registered User
  
 

Date d'inscription: juin 2008
Messages: 3
Sélectionnez un enregistrement d'un fichier correspondant à partir du deuxième fichier à l'aide de awk

J'ai besoin d'aide

J'ai deux fichiers en entrée, et je tiens à produire un rapport fondé sur les deux.

Filea:
nom d'hôte, compte1, mot de passe
, compte2, mot de passe
nom d'hôte, compte1, mot de passe
nom d'hôte, compte1, mot de passe
, compte1, mot de passe
, compte2, mot de passe

répéter les noms d'hôtes sont vides

fileb:
hosta
hostb
hostc

J'ai besoin de générer un nombre record de "hostname mot de passe du compte" pour tous les hôtes dans fileb qui se produisent dans Filea pour un compte spécifique. C'est-à-dire je veux une liste de mots de passe root à tous les hôtes dans fileb. Je sais que la logique que je veux utiliser, mais n'ont pas les compétences de rédaction de scripts à mettre en œuvre. Je pense que la façon la plus simple serait d'utiliser awk pour remplir les cases avec le nom d'hôte de Filea puis il suffit d'utiliser un script pour grep pour chaque hôte fileb de la nouvelle Filea.

L'autre manière est de courir Filea pour chaque nom d'hôte dans fileb jusqu'à ce que le compte est égalé ou le nom d'hôte est différent et imprimer le résultat. Si le compte n'existe pas pour le nom d'hôte donné de ne rien faire.

J'essaye de mettre manuellement le faire par script, il pense qu'il serait peut-être plus rapide, mais j'avais tort

Voici le cadre je suis venu à ce jour pour le plus difficile, car il serait plus élégant

#! / bin / sh
#
hosts \u003d `cat` hosts.txt
hostname \u003d "x"
last \u003d "x"

pour le nom de $ () hôtes
faire
# awk la logique voudrait venir ici
fait
  #2 (permalink)  
Old 06-05-2008
lo tan lo tan is offline
Registered User
  
 

Join Date: Mai 2008
Messages: 8
mai-vous nous donner un exemple du résultat que vous essayez d'atteindre et sur la base que nous avons mai trouver une solution.
  #3 (permalink)  
Old 06-06-2008
ère era is offline Forum Advisor  
Inutile de Herder Cats (en congé sabbatique)
  
 

Join Date: Mar 2008
Location: / il / est / que / bin / sh
Messages: 3652
Vous voulez dire quelque chose comme ça?


Code:
sed -e 's/.*/^&,/' fileb | grep -f - filea

Pas tous grep soutenir les versions -f option apparemment, mais l'idée est simplement de faire quelque chose de grep fileb qui est dans le premier champ de Filea.
  #4 (permalink)  
Old 06-06-2008
synmag synmag is offline
Registered User
  
 

Date d'inscription: juin 2008
Messages: 3
Citation:
Posté par ère View Post
Vous voulez dire quelque chose comme ça?


Code:
sed -e 's/.*/^&,/' fileb | grep -f - filea

Pas tous grep soutenir les versions -f option apparemment, mais l'idée est simplement de faire quelque chose de grep fileb qui est dans le premier champ de Filea.
Merci pour la réponse. Ma version ne supporte pas, malheureusement,-f. En regardant le code, où puis-je spécifier le nom du compte que je cherche? Je veux dire si le pays hôte à la liste, compte, mot de passe pour tous les comptes root? Aussi ce travail serait pour les enregistrements où le nom d'hôte est vierge?

Pour clarifier le problème, a Filea blancs pour répéter les noms d'hôtes et de dire si la racine est dans un dossier où il n'ya pas de nom d'hôte comment voulez-vous tirer le nom d'hôte pour le record? Le nom d'hôte, je suis à la recherche de l'avant non enregistrement vide.

exemple:

hosta, johndoe, abc123
, racine, 4009dlkj
hostb, janedoe, Rrrrrr

si un hôte est en fileb prévu pour mettre à la racine

hosta, root, 4009dlkj

J'ai tenté d'utiliser awk pour remplacer le vide avec un nom d'hôte de la précédente nonblank record, mais j'ai gardé obtenir des erreurs. Je ne pouvais même pas 1 $ à stocker une variable et l'imprimer comme un test. Je sais sed est très puissant mais je ne pense pas que cela pourrait se faire avec une seule ligne.

J'ai fini par le faire manuellement, la nuit dernière. À ce point il est esprits curieux veulent savoir, et il peut s'avérer pratique si je dois le faire de nouveau.

TIA
  #5 (permalink)  
Old 06-06-2008
reborg's Avatar
reborg reborg is offline Forum Staff  
Administrateur
  
 

Join Date: Mar 2005
Lieu: Irlande
Posts: 4,245
Citation:
Posté par ère View Post
Pas tous grep soutenir les versions -f option apparemment, mais l'idée est simplement de faire quelque chose de grep fileb qui est dans le premier champ de Filea.
Certes, mais la plupart ne soutiendra ni egrep-f ou fgrep.
  #6 (permalink)  
Old 06-09-2008
ère era is offline Forum Advisor  
Inutile de Herder Cats (en congé sabbatique)
  
 

Join Date: Mar 2008
Location: / il / est / que / bin / sh
Messages: 3652
Oh, j'ai mal compris votre description de problème. Voici quelque chose qui, espérons-est plus proche de ce que tu voulais.


Code:
awk -F , -v acct=root 'NR==FNR { h[$1]++; next; }
{ if($1 == "") $1=host; host=$1; if (! h[$1]) next;
if ($2 == acct) print }' fileb filea

Le NR \u003d\u003d FNR condition est vraie si fileb est en cours de lecture. Il s'agit d'une awk l'idiome de la lecture dans un fichier de données auxiliaires avant le traitement principal. Les noms d'hôte dans fileb sera utilisé pour remplir le tableau h. Ensuite, dans le corps principal du script, si le premier champ est vide, la valeur de la hôte variable sera utilisée pour $ 1. Ensuite, la valeur actuelle de 1 $, on se souviendra en hôte dans le cas où la ligne suivante (s) premiers champs sont vides. Ensuite, si le tableau h ne contient pas le nom de l'hôte actuel (ce qui signifie qu'il n'était pas présent dans fileb), La ligne en cours est sauté. Enfin, si le second champ est identique à la variable acct, La ligne est imprimée.

(Really old variantes de awk ne supporte pas de passage dans les variables avec la -v option - si vous avez ce problème, de voir si vous pouvez trouver nawk ou mawk ou gawk sur votre système, ou d'un XPG4 awk. Ou vous pouvez interpoler la variable directement dans le script.)
  #7 (permalink)  
Old 06-11-2008
synmag synmag is offline
Registered User
  
 

Date d'inscription: juin 2008
Messages: 3
Citation:
Posté par ère View Post
Oh, j'ai mal compris votre description de problème. Voici quelque chose qui, espérons-est plus proche de ce que tu voulais.


Code:
awk -F , -v acct=root 'NR==FNR { h[$1]++; next; }
{ if($1 == "") $1=host; host=$1; if (! h[$1]) next;
if ($2 == acct) print }' fileb filea

Le NR \u003d\u003d FNR condition est vraie si fileb est en cours de lecture. Il s'agit d'une awk l'idiome de la lecture dans un fichier de données auxiliaires avant le traitement principal. Les noms d'hôte dans fileb sera utilisé pour remplir le tableau h. Ensuite, dans le corps principal du script, si le premier champ est vide, la valeur de la hôte variable sera utilisée pour $ 1. Ensuite, la valeur actuelle de 1 $, on se souviendra en hôte dans le cas où la ligne suivante (s) premiers champs sont vides. Ensuite, si le tableau h ne contient pas le nom de l'hôte actuel (ce qui signifie qu'il n'était pas présent dans fileb), La ligne en cours est sauté. Enfin, si le second champ est identique à la variable acct, La ligne est imprimée.

(Really old variantes de awk ne supporte pas de passage dans les variables avec la -v option - si vous avez ce problème, de voir si vous pouvez trouver nawk ou mawk ou gawk sur votre système, ou d'un XPG4 awk. Ou vous pouvez interpoler la variable directement dans le script.)
C'est exactement ce que je voulais. Ma version de awk n'est pas favorable à l'adoption de la variable, mais je dois nawk et cela a fonctionné parfaitement.

Sur la base de la documentation awk, je tente d'utiliser le bloc de commencer à lire le fichier mais ne peut pas comprendre la façon de lire à partir de deux fichiers. Pourriez-vous expliquer comment l'esprit awk, qui détermine le fichier à lire à partir de? Est-il le code de la première série d'accolades () lit le premier fichier fourni et le deuxième jeu de la deuxième fichier?

Merci. J'ai beaucoup appris de cela!
Closed Thread

Bookmarks

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Sur




Toutes les heures sont au format GMT -4. Le temps est maintenant 04:36 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Les systèmes UNIX et Linux Forums Content Copyright © 1993-2009. Tous droits Reserved.Ad de gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0