Spalten einer Datei in neue Datei integrieren.

L

lightup

Grünschnabel
Hallo ich habe folgendes Problem.
Ich habe eine Datei mit ca. 39000 Zeilen und entsprechenden Infos. Nun möchte ich gerne von dieser Datei Die Spalten 2, 3, 4, 5 und noch ein paar zusätzliche Spalten mit neuem Inhalt in einer neuen Datei hinten anfügen.

Ich bin absolut nicht vom Fach und habe ein wenig mit awk herumprobiert. Kam aber nicht zum gewünschten Ergebnis.

Ausschnitt aus der Original-Datei (oxylim.star) aus der die Spalten entnommen werden sollen:

data_
loop_
_rlnImageName
_rlnMicrographName
_rlnDefocusU
_rlnDefocusV
_rlnDefocusAngle
_rlnVoltage
_rlnSphericalAberration
_rlnAmplitudeContrast
1@/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs 4487 25039.3 24092.6 46.0700 300 2.0 0.1
2@/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs 4487 25039.3 24092.6 46.0700 300 2.0 0.1
3@/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs 4487 25039.3 24092.6 46.0700 300 2.0 0.1
4@/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs 4487 25039.3 24092.6 46.0700 300 2.0 0.1
5@/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs 4487 25039.3 24092.6 46.0700 300 2.0 0.1
6@/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs 4487 25039.3 24092.6 46.0700 300 2.0 0.1
7@/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs 4487 25039.3 24092.6 46.0700 300 2.0 0.1
8@/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs 4487 25039.3 24092.6 46.0700 300 2.0 0.1
9@/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs 4487 25039.3 24092.6 46.0700 300 2.0 0.1
10@/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs 4487 25039.3 24092.6 46.0700 300 2.0 0.1


hier möchte ich die Spalten:
4487 25039.3 24092.6 46.0700 300 2.2 0.1
4487 25039.3 24092.6 46.0700 300 2.2 0.1
4487 25039.3 24092.6 46.0700 300 2.2 0.1
4487 25039.3 24092.6 46.0700 300 2.2 0.1
4487 25039.3 24092.6 46.0700 300 2.2 0.1
4487 25039.3 24092.6 46.0700 300 2.2 0.1
4487 25039.3 24092.6 46.0700 300 2.2 0.1
4487 25039.3 24092.6 46.0700 300 2.2 0.1
4487 25039.3 24092.6 46.0700 300 2.2 0.1
4487 25039.3 24092.6 46.0700 300 2.2 0.1

usw... rauskopieren und in die neue Datei anfügen. (Die Werte der Zahlen variieren im Verlauf der Datei. Sie sind also nicht komplett gleich.

meine neue Datei (test.star) sieht zur Zeit so aus.

data_
loop_
_rlnImageName
_rlnMicrographName
_rlnDefocusU
_rlnDefocusV
_rlnDefocusAngle
_rlnVoltage
_rlnSphericalAberration
_rlnAmplitudeContrast
**********
**********
**********
**********
**********
**********
**********
**********
**********
**********
...

Mein Ziel ist es folgendes zu erhalten

data_
loop_
_rlnImageName
_rlnMicrographName
_rlnDefocusU
_rlnDefocusV
_rlnDefocusAngle
_rlnVoltage
_rlnSphericalAberration
_rlnAmplitudeContrast
********** 4487 25039.3 24092.6 46.0700 300 2.2 0.1
********** 4487 25039.3 24092.6 46.0700 300 2.2 0.1
********** 4487 25039.3 24092.6 46.0700 300 2.2 0.1
********** 4487 25039.3 24092.6 46.0700 300 2.2 0.1
********** 4487 25039.3 24092.6 46.0700 300 2.2 0.1
********** 4487 25039.3 24092.6 46.0700 300 2.2 0.1
********** 4487 25039.3 24092.6 46.0700 300 2.2 0.1
********** 4487 25039.3 24092.6 46.0700 300 2.2 0.1
********** 4487 25039.3 24092.6 46.0700 300 2.2 0.1
********** 4487 25039.3 24092.6 46.0700 300 2.2 0.1
....
********** 5171 26601.1 25663.8 -11.8700 300 2.2 0.1


bisher habe ich es nur geschafft die Spalten unter die Werte von test.star anzuhängen... aber nicht als Spalten hinter die eigentlichen Einträge

Es wäre toll, wenn mir jemand helfen könnte...
Vielen Dank schon mal

Viele Grüße
 
Wenn ich Deine Daten so sehe, dann ist das was effektiv anders ist, dieses hier:

Original:

Code:
1@/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs

Verändert:

Code:
000001@LimStack.mrcs

Alles andere (Felder hinten dran, Vorspannzeilen der Datei) bleibt gleich.

Das sind zum einen mal führende 0-en. Und zum anderen ist es ein ersetztes Wort "LimStack.mrcs" - unbekannt woraus sich das ableitet. Ist das ein frei ausgewählter Wert?

also mit awk wäre das...

Code:
awk 'match($1,/([0-9])@/0-9a-zA-Z]+/,matches) {       # Suche Zeilen mit Datenwerten, merke das erste Feld im matches-Array
  printf "%06d@LimStack.mrcs",matches[1]              # gib das erste veränderte 1. Feld aus
  $1=""                                               # Das erste Feld wurde neu geschrieben, Inhalt wird also erst mal gelöscht
  print $0                                            # gib den Rest aus (ohne das gelöschte Feld $1)
}'
 
Zuletzt bearbeitet:
Das sind zum einen mal führende 0-en. Und zum anderen ist es ein ersetztes Wort "LimStack.mrcs" - unbekannt woraus sich das ableitet. Ist das ein frei ausgewählter Wert?

die Werte 00001, 00002 vor dem @ beziehen dich auf Bilder die in der Datei LimStack.mrcs abgelegt sind. LimStack.mrcs enthält 38032 Bilder bzw. Informationen zu diesen Bildern (Indem Fall die Zahlen die am Ende stehen und die ich behalten möchte)

Wo muss ich denn meine Datei bei deinem awk-Skript angeben? :-/

Mein awk-Skript sah bisher so aus. (habe nun direkt den kompletten Pfad zu LimStack.mrcs genommen)

awk '{if ($1!="C") {print $1"@./project/moltierphys/Limulus_oxy_old/Relion/LimStack.mrcs", $2, $3, $4, $5, " 300 2.2 0.1"} }' < oxylim.star >> Test2.star

wenn ich das ausführe kommt leider das raus:

1@/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs@./project/moltierphys/Limulus_oxy_old/Relion/LimStack.mrcs 4487 25039.3 24092.6 46.0700 300 2.2 0.1
2@/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs@./project/moltierphys/Limulus_oxy_old/Relion/LimStack.mrcs 4487 25039.3 24092.6 46.0700 300 2.2 0.1
3@/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs@./project/moltierphys/Limulus_oxy_old/Relion/LimStack.mrcs 4487 25039.3 24092.6 46.0700 300 2.2 0.1
4@/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs@./project/moltierphys/Limulus_oxy_old/Relion/LimStack.mrcs 4487 25039.3 24092.6 46.0700 300 2.2 0.1
5@/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs@./project/moltierphys/Limulus_oxy_old/Relion/LimStack.mrcs 4487 25039.3 24092.6 46.0700 300 2.2 0.1
6@/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs@./project/moltierphys/Limulus_oxy_old/Relion/LimStack.mrcs 4487 25039.3 24092.6 46.0700 300 2.2 0.1
7@/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs@./project/moltierphys/Limulus_oxy_old/Relion/LimStack.mrcs 4487 25039.3 24092.6 46.0700 300 2.2 0.1
8@/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs@./project/moltierphys/Limulus_oxy_old/Relion/LimStack.mrcs 4487 25039.3 24092.6 46.0700 300 2.2 0.1
9@/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs@./project/moltierphys/Limulus_oxy_old/Relion/LimStack.mrcs 4487 25039.3 24092.6 46.0700 300 2.2 0.1

hier wird einfach alles angehängt und nicht gegen @/data/home/haugwitz/Limulus/oxylim/oxylim.mrcs getauscht.

Trotzdem schon mal vielen Dank für deine Hilfe

Viele Grüße
 
die Werte 00001, 00002 vor dem @ beziehen dich auf Bilder die in der Datei LimStack.mrcs abgelegt sind.

Na dann zeig doch mal ein paar Zeilen der Datei LimStack.mrcs und beschreibe wie oxylim.mrcs und LimStack.mrcs zusammenhängen.

Wo muss ich denn meine Datei bei deinem awk-Skript angeben? :-/

grundsätzlich mal so:

awk '<awk-programm>' daten.txt

manchmal auch so:
befehle die daten produzieren | awk '<awk-programm>'

Du kannst das awk-Programm auch so in eine Datei schreiben:

Code:
#/usr/bin/awk -f
# awk programm hier hin

... und verwende bitte Code-Tags (Das ist unter dem Pluszeichen bei code zu finden), damit das einfacher lesbar ist.
 
Ohne awk aber funktioniert bei mir...

Code:
count=$(egrep -c "[[:digit:]]@" oxylim.star) ; for i in $(seq 1 $count) ; do append=$(printf " " ; egrep "^$i@" oxylim.star | cut -d \  -f 2-8) ; j=$(printf "%06d" $i) ; k=$(egrep "^$j@" test.star) ; sed -i 's/'"$k"'/&'"$append"'/' test.star ; done
 

Ähnliche Themen

Zeilen aus Txt-Datei entfernen, wenn eine Spalte einen bestimmten Wert enthält

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

Ausführbare C-Datei von Mac OS auf Embedded Linux ausführen

Gnome Classic Desktop: Home-Inhalt Icons ausblenden

awk: Dateiinhalt/Variableninhalt als Teil einer if-Anweisung

Zurück
Oben