
Frequencies -- 1403.6738 1403.6738 1403.6738
IR Inten -- 25.0809 25.0809 25.0809
Ich möchte zwei Spalten erhalten
Frequencies IR Inten
1403.6738 25.0809
und so weiter
Antwort1
Verwendung von Raku (der Programmiersprache, die früher als Perl6 bekannt war)
Für Probleme wie dieses verfügt Raku über einen praktischen Z
Operator zum „Komprimieren“ von Elementen, jeweils eines aus jeder Liste:
~$ raku -e 'my @array1 = lines(); put ( [Z] @array1[0].words, @array1[1].words).join("\n");' Freq_IR.txt
Frequencies IR_Inten
-- --
1403.6738 25.0809
1403.6738 25.0809
1403.6738 25.0809
Hinweis: Ich musste die Kopfzeile oben korrigieren, sodass die zweite Spalte den Titel " IR_Inten
" trägt. Sie können sie manuell bearbeiten oder den folgenden Code ausführen, bevor Sie die Daten mit dem obigen Code neu anordnen:
~$ raku -pe 's/IR \s Inten/IR_Inten/;' Freq_IR.txt > Freq_IR2.txt
HTH.
https://raku.org
https://docs.raku.org/language/operators#Zip_metaoperator
https://docs.raku.org/language/operators#index-entry-[+]_(reduction_metaoperators)
Antwort2
Verwenden eines beliebigen awk in einer beliebigen Shell auf jeder Unix-Box:
$ awk -F' -- ' -v OFS='\t' '
{ hdr[NR]=$1; n=split($2,v," "); for (i in v) vals[NR,i]=v[i] }
END { print hdr[1], hdr[2]; for (i=1; i<=n; i++) print vals[1,i], vals[2,i] }
' file
Frequencies IR Inten
1403.6738 25.0809
1403.6738 25.0809
1403.6738 25.0809
und für eine beliebige Anzahl von Ausgabezeilen und -spalten zu arbeiten:
awk -F' -- ' -v OFS='\t' '
{ hdr[NR]=$1; n=split($2,v," "); for (i in v) vals[NR,i]=v[i] }
END {
for (c=1; c<=NR; c++) {
printf "%s%s", hdr[c], (c<NR ? OFS : ORS)
}
for (r=1; r<=n; r++) {
for (c=1; c<=NR; c++) {
printf "%s%s", vals[c,r], (c<NR ? OFS : ORS)
}
}
}
' file
Antwort3
Mit awk können wir die Datentransformation durchführen.
awk -F ' -- ' '
{
# populate the array
a[++N] = $1; split($2, t, " ")
for (k in t) { a[++N] = t[k] }
}
END {ORS = ""
for (c=i=1; i<=N/NR; i++) {
for (j=i; j<=N; j+=N/NR) {
print a[j] (c++%NR ? "\t" : "\n")
}
}
}
' file
Frequencies IR Inten
1403.6738 25.0809
1403.6738 25.0809
1403.6738 25.0809
Die Grundidee besteht darin, zuerst das Array zu füllen und am Ende die Länge des Arrays aufzuzeichnen. Dann zerlegt man das Array in N/NR Teile und wählt aus jedem Teil die entsprechenden Elemente aus. In anderen Sprachen wie Python heißt dieser Vorgang zip
.