Ajout d'un texte au début d'une ligne en fonction de l'entrée dans le fichier
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?
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