вычесть строку из файла из всех строк из другого файла

вычесть строку из файла из всех строк из другого файла

Мне бы хотелось вычесть столбец за столбцом строку из одного файла и все строки из другого файла.

Вход:file1

1 1 1 1
3 1 5 1
1 5 8 2

Вход:file2

1 1 1 1

Желаемый результат:file3

0 0 0 0
2 0 4 0
0 4 7 1

ой, сед?

решение1

С awk:

awk 'NR==1   { for(i=1; i<=NF; i++) a[i] = $i }
     FNR!=NR { for(i=1; i <NF; i++) $i -= a[i]; print }' file2 file1

Это предполагает, что:

  1. соответствующая строка file2всегда первая
  2. первая строка file2и все строки file1имеют одинаковое количество столбцов
  3. если между столбцами имеется несколько пробелов, то file1их не нужно сохранять.

решение2

tr ' -' ' _' < file1 |          # dashes -> underscores per dc requirements
dc -e "
[q]sq                           # macro for quitting
[z :x     z0<a]sa               # macro for main stack -> array x[]
[z ;x -SM z0<b]sb               # macro for doing: stack M = stack[i]-x[i]
[LMdn32an zlk>c]sc              # macro for printing stack M elements
[?z0=q lbx lcx 10Pc z0=?]s?     # do-while loop to read in file1 per line and run the macros "b" then "c"
$(< file2 tr ' -' ' _')         # load up the main stack with file2
zsk lax l?x                     # store cols in reg. k, call macro "a" and
" > file3

Полученные результаты

0 0 0 0
2 0 4 0
0 4 7 1

Предположения

  1. GNU-DC-система
  2. Столько же столбцов в file1 и file2, но они должны быть одинаковыми.

решение3

Чистое решение bash.

Использование: ./subtracting.sh file1 file2

#!/bin/bash

read -ra subtrahend < "$2"

while read -ra minuend; do
    for i in "${!minuend[@]}"; do
        echo -n $((minuend[$i] - subtrahend[$i]))
    done
    echo
done < "$1"

Связанный контент