![]() |
|
|
google unix.com
|
|||||||
| Forums | S'inscrire | Forum Rules | Liens | Albums | FAQ | Liste des membres | Calendrier | Recherche | Aujourd'hui, les postes | Marquer les forums comme lus |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Recherche sur ce Thread | Rate Thread | Modes d'affichage |
|
|
|
||||
|
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 |
|
||||
|
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. |
|
||||
|
Citation:
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 |
|
||||
|
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.) |
|
||||
|
Citation:
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! |
![]() |
| Bookmarks |
| Thread Tools | Recherche sur ce Thread |
| Modes d'affichage | Rate this thread |
|
|