Meine Eingabe sieht folgendermaßen aus (tabulatorgetrennte Datei)
CHROM POS ID REF ALT 76_BRS_AMC_00D2282 c21_BE_MS1038U_BE_MS1038U_c30 93_BRS_MST_DNA17_53119M 94_BRS_MST_DNA17_53120M 100_BRS_BRU_D14_0867
01 12153 rs2454 A G 1,0,0 1,0,0 1,0,0 1,0,0 1,0,0
01 12154 rs2455 C G 1,0,0 1,0,0 1,0,0 1,0,0 1,0,0
Und ich möchte ein "#" anstelle des ersten "_" in jedem Spaltennamen
CHROM POS ID REF ALT 76#BRS_AMC_00D2282 c21#BE_MS1038U_BE_MS1038U_c30 93#BRS_MST_DNA17_53119M 94#BRS_MST_DNA17_53120M 100#BRS_BRU_D14_0867
01 12153 rs2454 A G 1,0,0 1,0,0 1,0,0 1,0,0 1,0,0
01 12154 rs2455 C G 1,0,0 1,0,0 1,0,0 1,0,0 1,0,0
Ich weiß nicht, wie ich mit sed mit tabulationen umgehen soll, ich habe es mit awk versucht
awk -F "\t" '/_/ && count < 2 {gsub("_","#");count++} {print $0}'
Aber es ersetzt nur alle "_" und nicht nur das erste Vorkommen
Ich hätte gerne eine awk oder sed Lösung.
(Entschuldigung, wenn es sich um eine replizierte Frage handelt, habe ich die Antwort nicht gefunden.)
sub
wird das erste Vorkommen ersetzen, also beschränken Sie einfach die zu bearbeitenden Datensätze NR==1
, schleifen Sie jede Spalte darin, ersetzen Sie sie durch die sub
und print
den Rest wie sie sind:
$ awk 'NR==1{for(i=1;i<=NF;i++)sub(/_/,"#",$i)}1' file
CHROM POS ID REF ALT 76#BRS_AMC_00D2282 c21#BE_MS1038U_BE_MS1038U_c30 93#BRS_MST_DNA17_53119M 94#BRS_MST_DNA17_53120M 100#BRS_BRU_D14_0867
01 12153 rs2454 A G 1,0,0 1,0,0 1,0,0 1,0,0 1,0,0
01 12154 rs2455 C G 1,0,0 1,0,0 1,0,0 1,0,0 1,0,0
(Sie müssen wahrscheinlich definieren BEGIN{FS=OFS="\t"}
, ob die Ausgabe auch durch Tabulatoren getrennt werden soll. Erklärt:
$ awk '
#BEGIN{FS=OFS="\t"} # incase you want output tab-delimited also (not in above script)
NR==1 { # process the header record only
for(i=1;i<=NF;i++) # loop every column header
sub(/_/,"#",$i) # replace the first _ with #
}1' file # output
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen