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

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

Входные данные: 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

awk, sed?

0
31.05.2017, 17:51
3 ответа

Чистый раствор Баша.

Использование: ./subtracting.sh файл1 файл2

#!/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"
0
28.01.2020, 02:33
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. Столько же столбцов в файле1 и файле2, но они должны быть одинаковыми.
0
28.01.2020, 02:33

С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
28.01.2020, 02:33

Теги

Похожие вопросы