如何使用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