J'ai un fichier de table telle que: et l'idée est simplement de supprimer dans la colonne Sseqid le texte après Je sais que : code>
et obtenir: p>
CUT -F 1 -D ":" code> correspondant
_species_strand_h.m8 code> peut fonctionner mais pas dans la colonne spécifique. p> p>
3 Réponses :
Je préfère Perl pour de telles choses:
cat inputfile | perl -ne '@in=split(/\s/);$in[1]=~s/:(.*)$//;print(join(" ",@in));print "\n"'
Vous pouvez le faire avec 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 sed code> assez facilement:
: code>. Le
: \ s + code> 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 code>. P> p>
awk est un bon choix pour gérer le texte basé sur la colonne: fera le travail: "Supprimer le :. * code> de la 2e colonne. p> p>
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 code>