J'ai un fichier délimité par l'espace. Je dois écrire une commande awk qui reçoit un argument de nom d'hôte et il devrait remplacer le nom d'hôte s'il est déjà défini dans le fichier. Il ne doit pas s'agir d'une correspondance complète - si le fichier contient ce nom d'hôte: localhost La recherche de "ho" échouera et sera ajoutée à la fin du fichier.comment supprimer une ligne du fichier en utilisant awk filtré par une chaîne
une autre option est une suppression: à nouveau awk reçoit l'argument du nom d'hôte et il doit le retirer du fichier s'il existe.
C'est ce que j'ai jusqu'à présent: (Il a besoin de quelques améliorations)
if [ "$DELETE_FLAG" == "" ]; then
# In this case the entry should be added or updated
# if clause deals with updating an existing entry
# END clause deals with adding a new entry
awk -F"[ ]" "BEGIN { found = 0;} \
{ \
if ($2 == $HOST_NAME) { \
print \"$IP_ADDRESS $HOST_NAME\"; \
found = 1; \
} else { \
print \$0; \
} \
} \
END { \
if (found == 0) { \
print \"$IP_ADDRESS $HOST_NAME\";
} \
} " \
/etc/hosts > /etc/temp_hosts
else
# Delete an existing entry
awk -F'[ ]' '{if($2 != $HOST_NAME) { print $0} }' /etc/hosts > /etc/temp_hosts
fi
Merci
Merci, cette modification a fait l'affaire! – embedded