J'ai un fichier csv code> et je veux remplacer une virgule avec
\ n code> après
gca _ * code>.
5 Réponses :
avec GNU SED:
sed 's/,\(ASM[^,]*\)/\n\1/g' input.csv
\ (GCA _ [^,] * \ \), code>: correspond à GCA * code> suivi d'une virgule. Le \ (... \ \) code> Définissez un groupe que nous pouvons utiliser ultérieurement dans la chaîne de remplacement. LI>
- Remplacement
\ 1 \ n code>: insère le groupe ("GCA *") du match et ajoute une nouvelle ligne. LI>
ul> Pour changer le fichier directement: P> xxx pré> ou pour corriger votre ligne de commande à partir du commentaire: p> xxx pré> ou mieux: pour prévenir les virgules suivis: p> xxx pré> p>
Ne fonctionne pas dans BSD ou MacOS. Si vous ne savez pas si l'OP utilise la même version que vous le souhaitez, il vaut mieux construire votre réponse afin qu'elle soit portable.
@ghoti limité à "gnu sed"
@ghoti pourriez-vous fournir une réponse portable. Je voudrais en savoir plus.
Le problème est que non-GNU SED n'interprète pas la notation Backslash ansi comme \ n code>. Le moyen canonique d'intégrer une nouvelle ligne dans la chaîne de remplacement consiste à utiliser une nouvelle ligne littérale précédée d'une barre oblique inverse. Vous pouvez le faire dans BASH en utilisant le format citant, comme:
SED $ 'S /, ASM / \\\ NASM / G' INPUT.CSV code>. Vous pouvez lire sur
$ '..' ' code> sous "Citant" dans la page Bash Man.
Bien que dans ce cas, je pense que l'OP est vraiment à la recherche d'une scission tous les 16 champs, comme le suggéra Mickp, donc: SED $ 'S / S /, / \\\ N / 16; P; D' INPUT.CSV < / code> serait probablement ma solution.
Ce simple GNU SED code>
pourrait être ce que vous recherchez:
s /, / \ n / 16 code>: remplace la 16e virgule
, code> avec une nouvelle ligne
\ n code> li>
p code>: imprime la ligne jusqu'à la première nouvelle ligne
\ n code> li>
d code>: supprime le texte imprimé et démarre le cycle à nouveau avec le texte restant li>
ul>
Une ligne d'explication sur ce que la commande sed code> signifie exactement, serait formidable.
Cela vient certainement d'une bonne réponse, mais c'est une réponse à une question différente. OP n'a pas précisé que gca_ sera toujours à la 16ème occurrence. 🤔
@Tomalak a ajouté expliquer :) @trebuchetms Il ressemble certainement à une longue ligne qui doit simplement être formaté pour être un CSV code>. Je pense que c'est une hypothèse juste que chaque
CSV code> a la même quantité de champs et que je peux donc utiliser une constante, telle que
16 code>.
Je seconde cette hypothèse. En outre, l'exemple d'entrée de l'OP est déjà contradictoire: il n'y a pas de cga _ code> dans le deuxième enregistrement.
Une autre façon de faire cette méthode 16e i> virgule: xargs -d, -l 16 echo
Vous devez supprimer le lorsque vous ne voulez pas la virgule, vous pouvez Utilisez P> * code> et ajouter
g code> pour global:
awk 'BEGIN {RS="[,]*ASM"} NF {print "ASM" $0}' ordered_lines_per_genome.csv
Solution AWK:
awk '{print gensub(",ASM","\nASM","g")}' ordered_lines_per_genome.csv > assembly_report_table.csv
Utilisation de Perl et en supposant que l'ID commence par ASM ..
$ cat maryem.txt ASM190063v1,Escherichia coli(E.coli),strain=D3,562,SAMN03252421,PRJNA269191,Nanjing Agricultural University,2016-12-12,n/a,major,Complete Genome,full,Newbler v. 2.7,30-80x,Illumina Miseq; Roche 454 GS Junior,GCA_001900635.1,ASM301855v1,Escherichia coli (E. coli),strain=2013C-4225,562,SAMN08579596,PRJNA218110,CDC,2018-3-26,n/a,major,Complete Genome,full,HGAP v. 3,yes,76.725x,PacBio,ASM330895v1,Escherichia coli (E. coli),strain=2017C-4109,562,SAMN09534373,PRJNA218110,CDC,2018-7-10,n/a,major,Complete Genome,full,HGAP v. 3,yes,286.7X,PacBio $ perl -pe ' s/([^^]ASM.+?,)/\n$1/g; s/^,//mg; ' maryem.txt ASM190063v1,Escherichia coli(E.coli),strain=D3,562,SAMN03252421,PRJNA269191,Nanjing Agricultural University,2016-12-12,n/a,major,Complete Genome,full,Newbler v. 2.7,30-80x,Illumina Miseq; Roche 454 GS Junior,GCA_001900635.1 ASM301855v1,Escherichia coli (E. coli),strain=2013C-4225,562,SAMN08579596,PRJNA218110,CDC,2018-3-26,n/a,major,Complete Genome,full,HGAP v. 3,yes,76.725x,PacBio ASM330895v1,Escherichia coli (E. coli),strain=2017C-4109,562,SAMN09534373,PRJNA218110,CDC,2018-7-10,n/a,major,Complete Genome,full,HGAP v. 3,yes,286.7X,PacBio $
Qu'avez-vous essayé? Vous avez étiqueté votre question avec AWK et SED, alors je m'attendais à voir un code AWK et SED que vous avez besoin d'aide.
J'ai essayé avec la commande SED, mais je n'ai pas fonctionné pour moi SED 'S / ASM * / \ N & / / / / / /' ordered_lines_per_genome.csv> Assembly_Repor_Table.csv
S'il vous plaît ajouter votre tentative de votre question. (Cela va probablement arrêter et peut-être inverser les bowvotes.) Nous aimerions vous aider à résoudre votre code, mais votre code devrait faire partie de la question. En outre, votre question indique que vous souhaitez ajouter une nouvelle ligne après
GCA _ code>, mais dans votre sortie d'échantillon, la deuxième nouvelle ligne n'est pas après ce texte. Pouvez-vous clarifier?
La tuile dit que vous voulez remplacer avant une chaîne (je pense
ASM code>), ce qui est confirmé par votre sortie souhaitée et votre tentative. La première ligne de la question devrait être modifiée, vous mentionnez
GCA _ code> ce qui n'est pas pertinent ici.