Question

Bonjour, j'ai une tâche difficile (au moins pour moi) à faire.Je dois faire ce qui suit:

Voici mon entrée

host1
atetley 170.198.19.165 91 18 6 4198
NJPYNYFWD01 170.198.82.143 257 14 6 4749
NJTTKLFWD01 170.198.82.142 257 13 6 3993
host2
dfriel 198.177.151.69 91 14 6 2023
host3
dfriel 198.177.151.69 91 14 6 2023
fklotz 198.177.151.81 91 15 6 1829
ganthos 198.177.151.92 91 20 6 791

J'ai besoin de la sortie suivante

host1 atetley 170.198.19.165 91 18 6 4198
host1 NJPYNYFWD01 170.198.82.143 257 14 6 4749
host1 NJTTKLFWD01 170.198.82.142 257 13 6 3993
host2 dfriel 198.177.151.69 91 14 6 2023
host3 dfriel 198.177.151.69 91 14 6 2023
host3 fklotz 198.177.151.81 91 15 6 1829 
host3 ganthos 198.177.151.92 91 20 6 791

Je ne sais pas comment faire cela du tout.J'ai un contrôle sur la façon d'injecter le nom d'hôte (exemple Host Host Host3) dans le fichier de dépôt.Donc, je peux dire mettre un identifiant unique avant chaque hôte comme "uuu"

uuuhost1
atetley 170.198.19.165 91 18 6 4198
NJPYNYFWD01 170.198.82.143 257 14 6 4749
NJTTKLFWD01 170.198.82.142 257 13 6 3993
UUUhost2
dfriel 198.177.151.69 91 14 6 2023
UUUhost3
dfriel 198.177.151.69 91 14 6 2023
fklotz 198.177.151.81 91 15 6 1829
ganthos 198.177.151.92 91 20 6 791

Mais j'ai toujours besoin du résultat comme celui-ci.Si l'ajout d'un identifiant unique aide.Je peux le dépouiller plus tard après la fin de la mainpulation du fichier.Exemple Prenez tous les "UUU" du fichier

host1 atetley 170.198.19.165 91 18 6 4198
host1 NJPYNYFWD01 170.198.82.143 257 14 6 4749
host1 NJTTKLFWD01 170.198.82.142 257 13 6 3993
host2 dfriel 198.177.151.69 91 14 6 2023
host3 dfriel 198.177.151.69 91 14 6 2023
host3 fklotz 198.177.151.81 91 15 6 1829 
host3 ganthos 198.177.151.92 91 20 6 791

Quelqu'un peut-il m'aider avec cela s'il vous plaît?

Était-ce utile?

La solution

Vous pouvez utiliser AWK pour l'imprimer:

awk 'NF==1{h=$1;next} {print h, $0}' file
host1 atetley 170.198.19.165 91 18 6 4198
host1 NJPYNYFWD01 170.198.82.143 257 14 6 4749
host1 NJTTKLFWD01 170.198.82.142 257 13 6 3993
host2 dfriel 198.177.151.69 91 14 6 2023
host3 dfriel 198.177.151.69 91 14 6 2023
host3 fklotz 198.177.151.81 91 15 6 1829
host3 ganthos 198.177.151.92 91 20 6 791

Autres conseils

 awk 'NF==1{p=$1;next}$0=p FS$0' file

Voici ma tentative:

awk '/^host/ {host=$1} NF>1{print host, $0}' <myfile

myfile contenant

host1
atetley 170.198.19.165 91 18 6 4198
NJPYNYFWD01 170.198.82.143 257 14 6 4749
...

Il fait ce qui suit, pour chaque ligne:

Si la ligne commence par l'hôte (si elle correspond // une expression régulière, ^ Etre d'hôte: ^ Démarre avec, hôte), attribuez le premier champ (1 $) à la variable "hôte"

Si le nombre de champ est supérieur à 1 (NF> 1), imprimez l'hôte de la variable et la ligne (0 $)

à bash:

while read FIRST REST
do
    [ ${FIRST:0:4} = "host" ] && HOST="$FIRST" || echo "$HOST $FIRST $REST"
done <inputfile

Cela pourrait fonctionner pour vous (GNU SED):

sed -r '/^\S+$/{h;d};G;s/(.*)\n(.*)/\2 \1/' file

Enregistrez le nom d'hôte dans l'espace Hold et prépendez-le aux lignes non d'hostername

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top