2017-09-14 6 views
0

J'ai un script qui supprime toutes les lignes dans un fichier donné qui a deux modèles présents, nomX et nom de familleX par exemple. Le problème est que parfois dans d'autres domaines plus dans la ligne du Namex peut apparaître et il supprime la ligne aussiComment supprimer des lignes qui correspondent à un modèle

NamexsurnameX sdkflfjffsl sdlfjsd flsdkjsdjf sdlfdf> ok pour supprimer

NameysurnameY ddsfdsfsfsf sf sdfdfdfdsfdsf fdf fsdf> maintenir la ligne

NameysurnameX dfdsfsffsfs df fsfsdfsff nomX fdsfffs> supprime, mais je ne le fais pas. La façon de procéder ?

Mon code est ci-dessous

awk '$0!~v1 || $0!~v2' v1="nameX" v2="surnameX" /home/oldfile > /home/newfile 

aide serait appreciatted :)

+0

essayer 'awk « $ 1! ~ V1 || $ 2! ~ V2 'v1 = "nomX" v2 = "nom de familleX"/home/ancien fichier>/home/newfile' –

+0

$ 1 et $ 2 sont les colonnes? –

+0

oui, alors que '$ 0' est la ligne entière –

Répondre

0

Pour l'exemple que vous avez donné, vous pouvez simplement vérifier les premiers champs de l'entrée:

awk '!($1~v1 && $2~v2)' v1="nameX" v2="surnameX" /home/oldfile > /home/newfile 

Remarque , ici, nous utilisons des correspondances regex, et si vous connaissez la valeur exacte du "motif", une meilleure façon utilise == (ou !=), par exemple, Tom et Tommy sont des noms différents, mais les deux correspondent Tom

awk '$1!=v1 || $2!=v2' v1="nameX" v2="surnameX" /home/oldfile > /home/newfile