0
votes

Comment supprimer du texte d'un motif dans une certaine colonne

J'ai un fichier de table telle que: xxx

et l'idée est simplement de supprimer dans la colonne Sseqid le texte après : et obtenir: xxx

Je sais que CUT -F 1 -D ":" correspondant _species_strand_h.m8 peut fonctionner mais pas dans la colonne spécifique.


0 commentaires

3 Réponses :


1
votes

Je préfère Perl pour de telles choses:

cat inputfile | perl -ne '@in=split(/\s/);$in[1]=~s/:(.*)$//;print(join(" ",@in));print "\n"'


0 commentaires

1
votes

Vous pouvez le faire avec sed assez facilement: xxx

La pièce à l'intérieur des parenthèses correspond à la première colonne, l'espace blanche entre les première et seconde colonnes, et la partie de la deuxième colonne jusqu'à (mais non compris) le caractère : . Le : \ s + correspond au reste de la deuxième colonne. La totalité de la partie correspondante de la ligne est ensuite remplacée par la seule partie à l'intérieur des parenthèses, qui est représentée par \ 1 .


0 commentaires

2
votes

awk est un bon choix pour gérer le texte basé sur la colonne: xxx

fera le travail: "Supprimer le :. * de la 2e colonne.


2 commentaires

J'aime mieux cette solution que la mienne. C'est plus court et plus clair. Cependant, il remplace tous les espaces entre les colonnes avec un seul caractère d'espace (mais uniquement sur des lignes qu'elle modifie). Cela peut ou non être un problème pour OP. Si les multiples espaces du fichier d'entrée y étaient intentionnellement à des fins de mise en forme, cela pourrait être un problème.


@Mikikholt Si le format est un problème, on peut essayer le tuyau à | colonne -t