![Escreva arquivo com 2 colunas usando shell script](https://rvso.com/image/154447/Escreva%20arquivo%20com%202%20colunas%20usando%20shell%20script.png)
Como posso imprimir variáveis em um arquivo de saída em duas ou mais colunas (usando echo
por exemplo). Eu tenho o seguinte:
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
Saída: (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
Com este script eu obtenho um arquivo de saída em uma única coluna (18x1), mas quero obter um array 9x2 (X vs Y) como:
Saída: (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
Responder1
Considere este arquivo 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 duas colunas:
$ 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
Salvando a saída em um arquivo
$ 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
Responder2
Talvez uma combinação de paste
e seq
possa ser mais simples:
paste datafile <( seq 0 50 $(( ($(wc -l datafile | cut -d' ' -f1 )-1)*50 )) ) > output
O último valor para seq
é baseado apenas nos números de linha do seu arquivo de dados de entrada.