Eu tenho um arquivo de dados com duas colunas de números:
Arquivo de entrada
4.182 4.1843
4.184 4.2648
4.2281 4.0819
4.2204 4.1676
4.0482 4.1683
4.0156 4.2895
4.4504 5.2369
4.3776 4.4979
4.3797 4.1372
4.1411 4.0528
Preciso inserir uma coluna de números espaçados uniformemente no arquivo de dados de entrada. Por exemplo, na saída foi inserida uma coluna de números espaçados por 5., então os números são 1, 6, 11,16 e assim por diante
saída
1 4.182 4.1843
6 4.184 4.2648
11 4.2281 4.0819
16 4.2204 4.1676
21 4.0482 4.1683
26 4.0156 4.2895
31 4.4504 5.2369
36 4.3776 4.4979
41 4.3797 4.1372
46 4.1411 4.0528
Responder1
- Crie uma coluna de índice no arquivo de dados original, usando
pr -t -n
. - Crie os dados do índice a serem inseridos como a nova coluna, com cada linha de dados do índice indexada pelo número da linha.Usei uma pequena função bash para fazer isso abaixo.
- Junte-se acoluna de índicecom odadosusando
join
.
Aqui está um script bash para demonstrar:
#!/usr/bin/env bash
# insert-counts.sh
cols='/tmp/cols'
cat <<'EOF' | pr -t -n >$cols
4.184 4.2648
4.2281 4.0819
4.2204 4.1676
4.0482 4.1683
4.0156 4.2895
4.4504 5.2369
4.3776 4.4979
4.3797 4.1372
4.1411 4.0528
EOF
# gen_index START NUM INC
gen_index() {
local start="$1" num="$2" inc="$3"
local x
for ((x = 0; x < num; x++)); do
printf "%2d %4d\n" $(( x + 1 )) $(( start + (x * inc) ))
done
}
lines=`wc -l <$cols`
gen_index 1 $lines 5 |
join -o 1.2 -o 2.2 -o 2.3 - $cols |
awk '{printf("%4d %8.4f %8.4f\n",$1,$2,$3);}'
E aqui está a saída:
$ ./insert_counts.sh
1 4.1840 4.2648
6 4.2281 4.0819
11 4.2204 4.1676
16 4.0482 4.1683
21 4.0156 4.2895
26 4.4504 5.2369
31 4.3776 4.4979
36 4.3797 4.1372
41 4.1411 4.0528
Responder2
Se eu entendi sua geração de índice corretamente, então
awk '{print 5*(NR-1)+1" "$0}' yourfile > oufile
deveria fazer isso. Se você quiser uma saída mais bonita, você pode usar printf
, por exemplo
$ awk '{printf "%-3d %s\n", 5*(NR-1)+1, $0}' yourfile
1 4.184 4.2648
6 4.2281 4.0819
11 4.2204 4.1676
16 4.0482 4.1683
21 4.0156 4.2895
26 4.4504 5.2369
31 4.3776 4.4979
36 4.3797 4.1372
41 4.1411 4.0528