¿Cómo puedo hacer que estos datos estén en columnas separadas?

¿Cómo puedo hacer que estos datos estén en columnas separadas?
Frequencies -- 1403.6738 1403.6738 1403.6738
IR Inten -- 25.0809 25.0809 25.0809

quiero obtener dos columnas

Frequencies     IR Inten
1403.6738       25.0809

etcétera

Respuesta1

Usando Raku (el lenguaje de programación anteriormente conocido como Perl6)

Raku tiene un Zoperador ingenioso para problemas como este, para "comprimir" elementos, uno de cada lista:

~$ 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

Nota: Tuve que corregir la línea del encabezado de arriba para que la segunda columna se titula " IR_Inten". Puede editar manualmente o ejecutar el código siguiente, antes de reorganizar los datos con el código anterior:

~$ 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)

Respuesta2

Usando cualquier awk en cualquier shell en cada caja Unix:

$ 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

y para trabajar con cualquier número de filas y columnas de salida:

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

Respuesta3

Usando awk podemos hacer la transformación de datos.

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

La idea básica es llenar primero la matriz y registrar la longitud de la matriz al final. Luego corte la matriz en partes N/NR y seleccione los elementos correspondientes de cada porción. En otros lenguajes como Python esta operación se llama zip.

información relacionada