如何使用bash比较两个文件中的数字并将差异保存到其中一个文件中?

如何使用bash比较两个文件中的数字并将差异保存到其中一个文件中?,bash,Bash,文件中只有一行。我想比较两个文件中以逗号分隔的数字,并将差异保存到旧值的右边 因此,以file1.txt为基础,在与file2.txt进行比较后,我希望看到: $> cat file1.txt 15,20,8, $> cat file2.txt 10,20,30, 有可能吗?bash不是解决此类问题的最佳选择,但仍然可行,比如: 15(+5),20,8(-22), AA=“15,20,8” BB=“10,20,30” IFS=“,” 声明-a=($AA) 声明-ab=($BB)

文件中只有一行。我想比较两个文件中以逗号分隔的数字,并将差异保存到旧值的右边

因此,以
file1.txt
为基础,在与
file2.txt
进行比较后,我希望看到:

$> cat file1.txt
15,20,8,

$> cat file2.txt
10,20,30,

有可能吗?

bash不是解决此类问题的最佳选择,但仍然可行,比如:

15(+5),20,8(-22),
AA=“15,20,8”
BB=“10,20,30”
IFS=“,”
声明-a=($AA)
声明-ab=($BB)
对于((i=0;i
#!/bin/bash)
#
#项目名称:diffcalc
#语法:diffcalc file1.txt file2.txt
#
#file1.txt中的最后一个元素必须始终为逗号
阅读第1行<“$1”
阅读第2行<“$2”
while[“$LINE1”]#while LINE1不为空
做
DIFF=$(${LINE1%%,*}-${LINE2%%,*}))#第一个元素之间的DIFF
[$DIFF-gt 0]&&OUT=“(+$DIFF)”
[$DIFF-eq 0]&&OUT=“”
[$DIFF-lt 0]&&OUT=“($DIFF)”
RESULT=“$RESULT”“${LINE1%%,*}”“$OUT”,#追加元素和(diff),
LINE1=${LINE1#*,};LINE2=${LINE2#*,}剪切第一个元素
完成
回显“$RESULT”>“$1”#将结果写入文件1

是的,这是可能的。到目前为止你做了什么?你如何比较这两个文件?尽量更明确一些。
AA="15,20,8"
BB="10,20,30"

IFS=","
declare -a A=($AA)
declare -a B=($BB)

for ((i=0; i<3; i++)); do
    if [ ${A[$i]} -eq ${B[$i]} ]; then
        echo -n ${A[$i]},
    else
        echo -n ${A[$i]}'('$((${A[$i]}-${B[$i]}))')',
    fi
done
#!/bin/bash
#
# progname: diffcalc
# syntax:   diffcalc file1.txt file2.txt
#
# last element in file1.txt must always be a comma

read LINE1 < "$1"
read LINE2 < "$2"

while [ "$LINE1" ]                          #while LINE1 is not empty
do
    DIFF=$(( ${LINE1%%,*} - ${LINE2%%,*} )) #diff between first elements
    [ $DIFF -gt 0 ] && OUT="(+$DIFF)"
    [ $DIFF -eq 0 ] && OUT=""
    [ $DIFF -lt 0 ] && OUT="($DIFF)"
    RESULT="$RESULT""${LINE1%%,*}""$OUT,"   # append element and (diff),
    LINE1=${LINE1#*,} ; LINE2=${LINE2#*,}   # cut the first elements
done

echo "$RESULT" >"$1"                        #write outcome to FILE1