Escriba un archivo con 2 columnas usando un script de shell

Escriba un archivo con 2 columnas usando un script de shell

¿Cómo puedo imprimir variables en un archivo de salida en dos o más columnas (usando, echopor ejemplo). Tengo lo siguiente:

grep -oP 'value\s*=\s*\K.*' file >x_vs_y  # x values

for X in $(seq 0 50 400)
do
   echo  "$X"  >>x_vs_y    # y values
done

Salida: (x_vs_y)

1.08759432363
1.08477216702
1.08211988431
1.07947977045
1.07685185457
1.07423631941
1.07163282502
1.06904156798
1.06646245052
0
50
100
150
200
250
300
350
400

Con este script obtengo un archivo de salida en una sola columna (18x1), pero quiero obtener una matriz de 9x2 (X vs Y) como:

Salida: (x_vs_y)

1.08759432363 0
1.08477216702 50
1.08211988431 100
1.07947977045 150
1.07685185457 200
1.07423631941 250
1.07163282502 300
1.06904156798 350
1.06646245052 400

Respuesta1

Considere este archivo de entrada:

$ cat file
value = 1.08759432363
value = 1.08477216702
value = 1.08211988431
value = 1.07947977045
value = 1.07685185457
value = 1.07423631941
value = 1.07163282502
value = 1.06904156798
value = 1.06646245052

Para imprimir dos columnas:

$ awk '{print x+0, $3; x+=50}' file
0 1.08759432363
50 1.08477216702
100 1.08211988431
150 1.07947977045
200 1.07685185457
250 1.07423631941
300 1.07163282502
350 1.06904156798
400 1.06646245052

Guardar la salida en un archivo

$ awk '0==a[$0]++' file >outfile
$ cat outfile
value = 1.08759432363
value = 1.08477216702
value = 1.08211988431
value = 1.07947977045
value = 1.07685185457
value = 1.07423631941
value = 1.07163282502
value = 1.06904156798
value = 1.06646245052

Respuesta2

Quizás una combinación de pastey seqpuede ser más simple:

paste datafile <( seq 0 50 $(( ($(wc -l datafile | cut -d' ' -f1 )-1)*50 )) )  > output

El último valor de seqse basa únicamente en los números de línea en su archivo de datos de entrada.

información relacionada