J'ai deux fichiers texte et je veux lire file1 ligne par ligne, en recherchant la même ligne dans file2 et en la supprimant de file2.
J'ai le pseudocode de:
for line in file1.txt
do
sed search line and delete in file2.txt
done
Vous pouvez accomplir cela avec grep.
Voici un exemple:
$ echo localhost > local_hosts
$ grep -v -f local_hosts /etc/hosts
127.0.1.1 ubuntu
# The following lines are desirable for IPv6 capable hosts
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Généralement, vous voulez conserver les lignes dans fichier2 qui ne figurent pas réellement dans fichier1.
Il y a plus de possibilités de ceux-ci,
comm <(sort file1) <(sort file2) -23
via rejoindre
join -v 1 <(sort file1) <(sort file2)
ou via AWK qui n'a pas besoin de trier les fichiers:
awk 'NR==FNR{lines[$0];next} !($0 in lines)' file2 file1
J'ai trouvé un moyen de le faire grâce à quelques recherches supplémentaires sur Internet. Et en utilisant seulement grep aussi sans avoir besoin de trier le fichier.
grep -Fvxf file2 file1
Cela affichera les nouvelles informations à l'écran, ce qui pose un problème, car je voulais supprimer ce qui se trouvait dans le fichier 2 de fichier1 et créer un nouveau fichier1. Comme le code ci-dessus fonctionnait, il me suffisait d’y ajouter quelque chose pour obtenir ce que je voulais.
grep -Fvxf file2 file1 > tempfile && mv tempfile file1
Cela résout mes problèmes. Peut-être pas la meilleure façon mais ça marche.