0
votes

Trouvez et supprimez un mot suivi des lignes suivantes (n) dans un fichier

J'ai un fichier appelé non-classifié. Un exemple de celui-ci ressemble à ceci (chacun est sur une nouvelle ligne): xxx

J'ai un autre fichier appelé Otucounts. Un échantillon de celui-ci ressemble à ceci xxx

Comment puis-je rechercher le fichier otUCounts et supprimer l'OTUS répertorié dans le fichier non classifié, à Ultimatley se retrouver avec un nouveau fichier à ressembler Otucounts mais avec lesclassifications supprimées?

J'ai commencé à utiliser: xxx

mais je sais qu'il a besoin de plus ajouté - Je suis assez nouveau à cela.

Des idées?


3 commentaires

Qu'entendez-vous par « chacun recouvre 4 lignes »? Les éditeurs ont-ils gâché votre OTUCOUTS échantillon?


Sont le > réellement contenu dans le fichier ict ?


La question que celle-ci était marquée comme un duplicata est sur la sélection des entrées correspondant à un autre fichier, ne supprimant pas les entrées correspondant, comme celle-ci. L'objectif exact opposé, en d'autres termes.


4 Réponses :


0
votes

Vous pouvez utiliser awk code> et stocker les champs OTU de non classifié code> dans un tableau. Quand otucounts code> est lu, test si le premier champ est présent dans le tableau. Si cela est vrai, puis définissez un drapeau et sautez les lignes suivantes jusqu'à ce que la prochaine OTU soit trouvée. Puis réinitialisez le drapeau.

awk '
  NR==FNR{       # if this is the first file...
    a[$1]        # save the first field in array `a` as array index
    next         # continue with the next line
  }
  $1 in a{       # if the first field is present in array `a`
    skip=1       # set a flag to skip the next lines
    next         # continue with the next line
  }
  skip{          # if the flag is set
    if (/^OTU/){ # if this is the next OTU
      skip=0     # reset the flag
      print      # print the current line
    }
    next         # continue with the next line
  }
  1              # print the current line
' unclassified OTUcounts > newOTUcounts


0 commentaires

0
votes

Essayez d'utiliser l'option V de grep :

grep -v -f non classifié itucounts> NewoCounts


0 commentaires

0
votes

Nous pouvons en effet le faire avec seulement grep , en générant d'abord une liste des OTU à garder, puis à l'aide de l'option - après-contexte pour imprimer le trois lignes de contexte; Enfin, nous devons retirer la ligne contenant un séparateur de groupe (-) que grep entre des groupes contigus de matchs. xxx


0 commentaires

0
votes

une approche alternative qui utilise GNU sed code> (et une coque comme Bash code> ou zsh code> qui comprend Redirection):

gsed -f <(while read otu; do echo "/^>${otu}\$/,+2d"; done < unclassified) OTUcounts > newOTUcounts


0 commentaires