wie kann ich Artikelnamen in der Referenzenliste ändern?

D

daria

Grünschnabel
Hallo Leute
kann mir jemand helfen?
ich habe eine SEHR lange Lieste aus Referenzen.
Die sehen so aus:

% 0213264 (JID)
@Article{pmid11027914,
Author = "Hochberg, Y",
Year = 1988,
Title = "{{A} sharper Bonferroni procedure for multiple tests of significance}", Journal = "Biometrika",
Volume = 75,
Number = 4,
Pages = "800--802"
}

% 0213264 (JID)
@Article{pmid11038465,
Author = "Hommel, G",
Title = "{{A} stagewise rejective multiple test procedute
based on a modified Bonferroni test}",
Journal = "Scand J Statist",
Year = 1988,
Number = 75,
Pages = "383--386"
}

soll aber so ausehen:

% 0213264 (JID)
@Article{Hoch1988,
Author = "Hochberg, Y",
Year = 1988,
Title = "{{A} sharper Bonferroni procedure for multiple tests of significance}", Journal = "Biometrika",
Volume = 75,
Number = 4,
Pages = "800--802"
}

% 0213264 (JID)
@Article{Homm1988,
Author = "Hommel, G",
Title = "{{A} stagewise rejective multiple test procedute
based on a modified Bonferroni test}",
Journal = "Scand J Statist",
Year = 1988,
Number = 75,
Pages = "383--386"
}

die "pmid*" Nummer muss ich durch die ersten 4 Buchstaben des Autors und Jahr ersetzen.
Wie kann ich das machen?

Grüsse
Daria
 
Kannst du ein (Daten-)Vorher-Nacher Beispiel posten... Ist dann einfacher zu verstehen.

Grüsse
d22
 
ja klar

oberer Teil ist vorher und der untere ist nachher
 
Hallo
Welche Shell verwendest du?
Welches OS?
Wenn du bash hast, schau dir mal IFS an und verwende ein while read....

Oder gleich mit perl.

Gruß Wolfgang
 
Quick and dirty:

Code:
perl -00 -pe '($auth)=$_=~/Author = "([^,]{1,4})/; ($year)=$_=~/Year = (.*?),/; s/(\@Article\{).*/$1$auth$year,/' ref.txt

Gruß, Daniel

edit: Für inplace-Ändern den -i Flag benutzen:

Code:
perl -00 -pi -e '($auth)=$_=~/Author = "([^,]{1,4})/; ($year)=$_=~/Year = (.*?),/; s/(\@Article\{).*/$1$auth$year,/' ref.txt
 
Zuletzt bearbeitet:
Sorry habs nicht gesehen ;).
Knifflig, aber Xanti hat das Problem ja schon gelöst. Ich glaub ich muss mich doch mal noch mit Perl beschäftigen ;)

Ich muss sagen, ich bin immer wieder schwer beeindruckt, wie schnell das geht ;).

Gruss
d22
 
Perl ist für sowas optimal geeignet und auf jeden Fall "beschäftigungswert". :)
 
Hallo
Bei perlgolf hätte ich verloren. ;)
Aber ich habe auch einen ..
Code:
perl -0\000 -an -e '@a=split"\n";$c=$1 if($a[2]=~/"(\w{4})/);$c.=(split /\s|,/,$a[6])[2];$a[1]="\@Article\{pmid"."$c";map{print "$_\n"}@a' test

Gruß Wolfgang
PS Verneige mich tief vor Xanti
Wer probiert das mit sed? *gg*
 
Ich dachte, für sed-Lösungen bist Du zuständig. ;)

edit: Was mir aufgefallen ist: was ist eigentlich, wenn der Nachname weniger als 4 Buchstaben hat?
 
Zuletzt bearbeitet:
Hallo
Klar könnte man mein Array anonym machen, und split direkt in die Zuweisung setzen, das spart etliches, wird aber sicher total unverständlich.

Was sed betrifft, lass ich dir heute den Vortritt. *g*

Gruß und schönes Wochenende.
Wolfgang
 
Meine Lösung war da auch anfällig, hab sie auch noch schnell oben verbessert.

Bezüglich sed: Ne danke, da passe ich. So fit bin ich nicht in sed. ;)

edit: Ebenfalls ein schönes Wochenende!
 
Zuletzt bearbeitet:
habe ausprobiert ...

habe das Erste ausprobiert, hat aber die neuen Artikelnamen nicht geschrieben.
dieses funktioniert aber (bei mir):

perl -00 -ne '($auth) = $_=~/[Aa]uthor =\s*[{"]([a-zA-Z]{1,4})/; ($year) = $_=~/[yY]ear =\D*(\d+)/; s/(\@Article\{).*,/$1$auth$year,/; print'

Erlaubt "" und {} zum Einfassen der Einträge und funktioniert ab 1 Zeichen im Namen (habe einen davon)

Danke für ihre Vorschläge.:)
 

Ähnliche Themen

Rollei Mini Wifi Camcorder

NagiosGrapher 1.7.1 funktioniert nicht

dovecot und postfix Konfiguration Problem

CentOS 6.3 RADIUS - Keine Verbindung möglich

Displayport + externer Monitor zeigt bei startx nichts erst bei DVI

Zurück
Oben