somando duas matrizes cada uma em um arquivo diferente

3

eu tenho 2 arquivos cada um contém como segue:

arquivo 1:

data : [ 56, 34, 23, 54, 90, 234, 53, 12 ]

arquivo 2:

data : [ 42, 56, 23, 98, 90, 23, 53, 32 ]

Eu quero somar o primeiro valor do arquivo 1 com o primeiro valor do arquivo 2 e o segundo com o segundo e assim por diante e assim por diante.

, então o arquivo3 deve ser assim:

data : [ 98, 90, 46, 152, ... ]

como posso conseguir algo assim

    
por Ammar Akkad 02.04.2017 / 21:43

4 respostas

0

awk -F ',? ' '
    {
        for(i=4;i!="]";i++)
            A[i]=$i
        getline file2
        printf("%s %s %s ", $1, $2, $3)
        i--
        for(j=4;j<i;j++)
            printf("%d, ", $j + A[j])
        print $j + A[j++], $j
    }
    ' file1
    
por 02.04.2017 / 23:55
0
paste file1 file2 | tr '[],:' '    ' |
perl -lane '
   my($b, $e) = grep { $F[$_] eq "data" } 0 .. $#F;
   print
      join $",
         qw/data : [/,
         join(", ", map { $F[$_] + $F[$_+$e-$b] } $b+1 .. $e-1),
         q/]/,
      ;
' > file3

Saída

data : [ 98, 90, 46, 152, 180, 257, 106, 44 ]
    
por 03.04.2017 / 00:41
0

Com o GNU awk como uma linha (dividida aqui em duas linhas para facilitar a leitura):

$ awk 'BEGIN{FPAT="[0-9]+"}NR!=FNR{printf("%s","data : [ ")} \
{for (i=1;i<=NF;i++) if (NR==FNR) {a[i]=$i} else {printf("%s%s", (a[i]+$i), (i==NF)?" ]\n":",")}}' file5 file6
data : [ 98,90,46,152,180,257,106,44 ]

Isso usa o método FPAT para definir os campos em vez de FS.

O FS é usado normalmente para definir o que os campos não contêm, enquanto o FPAT é usado para definir o que os campos contêm.

Arquivo5 e Arquivo6 contêm seus dados de entrada:

$ cat file5
data :  [ 56, 34, 23, 54, 90, 234, 53, 12 ]
$ cat file6
data : [ 42, 56, 23, 98, 90, 23, 53, 32 ]
    
por 03.04.2017 / 15:55
0
$ awk -F'[^0-9]+' '
# output prefix
BEGIN {
   printf "data : [ "
}
# read first file
NR == FNR {
  for (i = 2; i < NF; i++) {
    a[i] = $i
  }
}
# read second file, output list of sums
NR != FNR {
  for (i = 2; i < NF; i++) {
    printf sep $i + a[i]
    sep = ", "
  }
}
# output suffix
END {
  print " ]"
}
' file1 file2
    
por 05.04.2017 / 18:22

Tags