
Ich habe eine durch Tabulatoren getrennte mehrspaltige Datei, in der Spalte 19 folgendermaßen aussieht:
gaA
gGg
Att
gtC
gGa
gcC
ccG
cTc
.
.
.
and so on
Ich möchte nur Großbuchstaben greppen, also habe ich Folgendes verwendet:
cut -f19 1.table | grep -e '[[:upper:]]' -o
Die Ausgabe ist:
A
G
A
C
G
C
G
T
.
.
.
and so on
Ich möchte aber nicht cut vor grep verwenden. Dazu habe ich jetzt zwei Fragen:
- Gibt es eine Möglichkeit, ab Spalte 19 zu greppen, anstatt Cut zu verwenden? Oder gibt es in grep eine Option oder einen Parameter, um eine Spalte anzugeben?
- Ich möchte die Ausgabe des Grep-Ergebnisses als neue Spalte in der Datei 1.table einfügen. Oder wie kann ich die Ausgabe des Grep-Ergebnisses als neue Spalte (als Spalte 20) in der Datei 1.table weiterleiten?
Hier sind die Eingabezeilen von 1.table (1.table hat auch eine Kopfzeile):
#CHROM POS ID REF ALT QUAL AC AN AF DP ExonicFunc.refGene Func.refGene AAChange.refGene Gene.refGene GeneDetail.refGene GENEINFO EFF refcodon ExAC_AFR ExAC_ALL ExAC_AMR ExAC_EAS ExAC_FIN ExAC_NFE ExAC_OTH ExAC_SAS gnomAD_exome_AFR gnomAD_exome_ALL gnomAD_exome_AMR gnomAD_exome_ASJ gnomAD_exome_EAS gnomAD_exome_FIN gnomAD_exome_NFE gnomAD_exome_OTH gnomAD_exome_SAS gnomAD_genome_AFR gnomAD_genome_ALL gnomAD_genome_AMR gnomAD_genome_ASJ gnomAD_genome_EAS gnomAD_genome_FIN gnomAD_genome_NFE gnomAD_genome_OTH 1000g2015aug_all esp6500siv2_all CADD_phred CADD_raw CADD_raw_rankscore CAF DANN_rankscore DANN_score Eigen Eigen-PC-raw Eigen-raw Eigen_coding_or_noncoding FATHMM_coding FATHMM_converted_rankscore FATHMM_noncoding FATHMM_pred FATHMM_score FS GTEx_V6_gene GTEx_V6_tissue GWAVA_region_scoreGWAVA_tss_score GWAVA_unmatched_score GenoCanyon_score GenoCanyon_score_rankscore Interpro_domain LRT_converted_rankscore LRT_pred LRT_score MetaLR_pred MetaLR_rankscore MetaLR_score MetaSVM_pred MetaSVM_rankscore MetaSVM_score MutationAssessor_pred MutationAssessor_score MutationAssessor_score_rankscore MutationTaster_converted_rankscore MutationTaster_pred MutationTaster_score PROVEAN_converted_rankscore PROVEAN_pred PROVEAN_score Polyphen2_HDIV_pred Polyphen2_HDIV_rankscore Polyphen2_HDIV_score Polyphen2_HVAR_pred Polyphen2_HVAR_rankscore Polyphen2_HVAR_score QD SIFT_converted_rankscore SIFT_pred SIFT_score SiPhy_29way_logOdds SiPhy_29way_logOdds_rankscore VC VEST3_rankscore VEST3_score WGT avsnp147=rs28410799 integrated_confidence_value integrated_fitCons_score integrated_fitCons_score_rankscorephastCons100way_vertebrate phastCons100way_vertebrate_rankscore phastCons20way_mammalian phastCons20way_mammalian_rankscorephyloP100way_vertebrate phyloP100way_vertebrate_rankscore phyloP20way_mammalian phyloP20way_mammalian_rankscore CLINSIG CLNACC CLNDBN CLNDSDB CLNDSDBID GT AD DP GQ PL GT AD DP GQ PL GT AD DP GQPL
chr1 13115765 rs141111983 C T 2280.92 3 6 0.5 153 synonymous_SNV exonic HNRNPCL2:NM_001136561:exon2:c.G636A:p.E212E HNRNPCL2 0 HNRNPCL2:440563 SYNONYMOUS_CODING(LOW|SILENT|gaG/gaA|E212|293|HNRNPCL2|protein_coding|CODING|ENST00000621994|2|T),NEXT_PROT[coiled-coil_region](LOW||||293|HNRNPCL2|protein_coding|CODING||2|T),INTRON(MODIFIER||||478|WI2-3308P17.2|protein_coding|CODING|ENST00000622351|1|T),INTRON(MODIFIER||||478|PRAMEF26|protein_coding|CODING|ENST00000621259|4|T) gaG gaA E212 0.4772 0.4933 0.4993 0.497 0.5 0.4918 0.4967 0.4996 0.4846 0.4959 0.4998 0.4969 0.499 0.4999 0.4939 0.4969 0.4998 0.4939 0.4125 0.4867 0.1888 0.4981 0.4997 0.3321 0.4604 0 0 0 0 0 0 0 0-0.3847 -0.3847-PC-raw -0.3847-raw 0 0.02308 0 0.87915 0 0 18.131 0 0 0.43 0.23 182 000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 000 0 0 0 0 0 14.91 0 0 0 0 0 SNV 0 0 1 rs141111983=rs28410799 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0B00H7EW=0/1 38,18 56 99 722,0,1577 B00H7EX=0/1 31,29 60 99 1166,0,1211 B00H7EY=0/1 26,11 3799 423,0,1098
chr1 13115766 rs150951326 T C 2325.92 3 6 0.5 155 nonsynonymous_SNV exonic HNRNPCL2:NM_001136561:exon2:c.A635G:p.E212G HNRNPCL2 0 HNRNPCL2:440563 NON_SYNONYMOUS_CODING(MODERATE|MISSENSE|gAg/gGg|E212G|293|HNRNPCL2|protein_coding|CODING|ENST00000621994|2|C),NEXT_PROT[coiled-coil_region](LOW||||293|HNRNPCL2|protein_coding|CODING||2|C),INTRON(MODIFIER||||478|WI2-3308P17.2|protein_coding|CODING|ENST00000622351|1|C),INTRON(MODIFIER||||478|PRAMEF26|protein_coding|CODING|ENST00000621259|4|C) gAg gGg E212G 0.4775 0.4934 0.4993 0.4972 0.5 0.4919 0.4967 0.4996 0.4851 0.496 0.4998 0.4969 0.4991 0.4999 0.494 0.4969 0.4998 0.494 0.4127 0.4867 0.1875 0.4981 0.4997 0.3323 0.4603 0 0 0.286 -0.453 0.058 0 0.019 0.324 -0.4897 -0.4897-PC-raw -0.4897-raw n 0.01015 0 0.80402 0 0 22.504 0 00.43 0.23 182 0 0.029 0 0 0 0 0 0 0 0 0 0 0 0 000 0 0 0 0 B 0.026 0 B 0.013 0 15.01 0 0 0 0 0 SNV 0.089 0.091 1 rs150951326=rs28410799 0 0.075 0.013 0.947 0.327 0.005 0.09 -0.854 0.044 -0.972 0.023 0 0 0 0 0 B00H7EW=0/1 38,19 57 99 764,0,1574 B00H7EX=0/1 31,30 61 991166,0,1211 B00H7EY=0/1 26,11 37 99 426,0,1056
chr1 13392320 rs767291041 C A 96.12 1 4 0.25 10 nonsynonymous_SNV exonic PRAMEF16:NM_001045480:exon3:c.C1243A:p.P415T,PRAMEF17:NM_001099851:exon3:c.C1243A:p.P415T PRAMEF16,PRAMEF17 0 PRAMEF17:391004 NON_SYNONYMOUS_CODING(MODERATE|MISSENSE|Cct/Act|P415T|474|PRAMEF17|protein_coding|CODING|ENST00000376098|3|A) Cct Act P415T 0 0.001 0 0 0 0.002 0 0 0 0.0006 0.0016 0 0 0 0.0009 0.0008 0 0 0.0002 0 0 0 0 0.0007 0 0 0 0 0 0 0 0 0 -0.1177 -0.1177-PC-raw -0.1177-raw 0 0.02548 0 0.24739 0 0 0 0 0 0 0 0 0 0 000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 000 0 0 0 10.68 0 0 0 0 0 SNV 0 0 1 rs782058522=rs28410799 000 0 0 0 0 0 0 0 0 0 0 0 0 0 B00H7EW=0/1 4,5 999 123,0,100 B00H7EX=0/0 1,0 1 3 0,3,30 B00H7EY=./. 0,0 0 0 0,0,0
chr1 13392320 rs767291041 C A 70.13 1 6 0.167 37 nonsynonymous_SNV exonic PRAMEF17:NM_001099851:exon3:c.C1243A:p.P415T PRAMEF17 0 PRAMEF17:391004 NON_SYNONYMOUS_CODING(MODERATE|MISSENSE|Cct/Act|P415T|474|PRAMEF17|protein_coding|CODING|ENST00000376098|3|A) Cct Act P415T 0.0048 0.0006 0 0 0 0 0 00.0002 0.0005 0.0009 0 0 0 0.0007 0.0006 0 0 0.0002 0 0 0 0 0.0004 0 0022.7 3.18 0.442 0 0.453 0.988 -0.1208 -0.1208-PC-raw -0.1208-raw c 0.0207 0.12 0.11274 T 2.72 000 0 0 0 0 0.061 0 0.843 D 0 T 0.356 0.094 T 0.045 -1.097 H 3.83 0.957 0.09 N 1 0.954 D -7.63 D 0.899 1 D 0.875 0.998 11.69 0.784 D 0.001 5.599 0.165 SNV 0.353 0.293 1 rs767291041=rs28410799 0 0.487 0.133 0.019 0.194 0.031 0.148 1.655 0.367 0.621 0.289 0 0 0 0 0 B00H7EW=0/1 3,3 6 94 101,0,94 B00H7EX=0/0 13,0 13 39 0,39,442 B00H7EY=0/0 18,0 18 48 0,48,720
Antwort1
gibt es in grep eine Option oder einen Parameter, um eine Spalte anzugeben?
grephat nichtFeldtrennzeichenOption.
Verwenden Sie die folgendenawkAnsatz stattdessen:
awk -F'\t' -v OFS='\t' '{match($19,/[A-Z]+/); $20=substr($19,RSTART,RLENGTH) FS $20}1' 1.table
match($19,/[A-Z]+/)
- erfasst Großbuchstaben im 19. Feld
$20=substr($19,RSTART,RLENGTH) FS $20
- extrahiert übereinstimmende Großbuchstaben aus19te Feld und fügt es ein als20ter Feldwert
Antwort2
Um Ihre wörtliche Frage zu beantworten, wie man das macht mitgrep
allein. Obwohl grep
es nicht dafür entwickelt wurde, grep
können Sie mit GNU und PCRE-Unterstützung Folgendes tun:
grep -Po '(?:^(?:[^\t]*\t){18}|\G)[^\t]*?\K[[:upper:]]'
Das heißt, wir suchen entweder nach 18 Sequenzen von <not-TABs><tab>
am Anfang der Zeile oder am Ende der vorherigen Übereinstimmung ( \G
), gefolgt von der kleinstmöglichen Anzahl von Nicht-Tabulatorzeichen (so dass wir uns immer noch im 19. Feld befinden), gefolgt von einem Großbuchstaben, aber mit \K
setzen wir den Anfang derabgestimmtTeil direkt vor diesem Großbuchstaben.
Bei einer Eingabe wie:
X<tab>X<tab>....<tab>AbC<tab>X<tab>...
Es würde berichtet:
A
C
Wie bei Ihrem cut | grep
Ansatz.
Wenn Sie nur am ersten Großbuchstaben im 19. Feld interessiert sind, können Sie es wie folgt vereinfachen:
grep -Po '^(?:[^\t]*\t){18}[^\t]*?\K[[:upper:]]'
Um es als 20. einzufügenSpalte, du könntest es tun:
paste <(cut -f1-19 < file) <(grep ...above < file) <(cut -f20- < file) > newfile
Oder um es als letzte Spalte einzufügen:
grep... < file | paste file - > newfile
Antwort3
Mit sed
Ihnen können Sie
sed '/^#/!s/\([^ ]* *\)\{18\}[a-z]*\([A-Z]\).*/& \2/'
#
Das heißt, für alle Zeilen, die nicht mit (dem Selektor) beginnen /^#/!
, markieren Sie nach 18 Kombinationen aus Nicht-Leerzeichen und Leerzeichen den Großbuchstaben mit, um \(\)
später darauf verweisen zu können, „ersetzen“ Sie die gesamte Zeile durch sich selbst und hängen Sie Leerzeichen mit dem gefundenen Großbuchstaben an.
Wenn Sie erweiterte reguläre Ausdrücke bevorzugen, können Sie auch
sed -E '/^#/!s/([^ ]* *){18}[a-z]*([A-Z]).*/& \2/'
Wenn Spalten durch Tabulatoren statt Leerzeichen getrennt sind,
sed -E '/^#/!s/([^\t]*\t){18}[a-z]*([A-Z]).*/&\t\2/'