한 파일의 행을 가져와 다른 파일의 모든 행을 열별로 빼고 싶습니다.
입력하다: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
어, sed?
답변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
이는 다음을 가정합니다.
- 관련 줄은
file2
항상 첫 번째 줄입니다. - 첫 번째 행
file2
과 모든 행file1
의 열 수가 동일합니다. - 열 사이에 공백이 여러 개 있으면
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
가설
- GNU DC
- 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"