![Escriba un archivo con 2 columnas usando un script de shell](https://rvso.com/image/154447/Escriba%20un%20archivo%20con%202%20columnas%20usando%20un%20script%20de%20shell.png)
¿Cómo puedo imprimir variables en un archivo de salida en dos o más columnas (usando, echo
por 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 paste
y seq
puede ser más simple:
paste datafile <( seq 0 50 $(( ($(wc -l datafile | cut -d' ' -f1 )-1)*50 )) ) > output
El último valor de seq
se basa únicamente en los números de línea en su archivo de datos de entrada.