我有两个文件,
A
john 1 2 3 4 5 6 7
Ely 10 9 9 9 9 9 9
Maria 3 5 7 9 2 1 4
Rox 10 10 10 10 10 10 10
B
john 7.5
Ely 4.5
Maria 3,7
Rox 8.5
我想要做的是创建另一个文件,只有文件A中的人的平均值大于或等于8.5,而在B中他们的标记也大于或等于8.5,所以在我的例子中C文件将包含只有Rox,因为只有她符合标准。
我有这个
#shell program
echo "Fiserul are numele $1"
filename=$1
filename2=$2
echo "">temp.txt
touch results
compara="8.5"
cat $filename | while read -r line
do
nota=0
media=0
echo " $line"
rem=$( echo "$line"| cut -f 2- -d ' ')
for word in $rem
do
echo "$word"
nota=$(($nota+$word))
echo "Nota=$nota"
done
media=$(($nota / 7))
if [ "$(echo $media '>=' $compara | bc -l)" -eq 1 ];
then
nume=$( echo "$line"| cut -f 1 -d ' ')
echo "$nume $media" >> temp.txt
fi
echo "Media : $media"
done
cat $filename2 | while read -r line
do
所以我在temp.txt文件中有满足文件A标准的人但我的问题是如何将它们与来自filename2的人进行比较并从中创建“结果”? 我尝试了两个while循环,但是我得到一个错误,有人可以帮忙吗? 谢谢!
答案 0 :(得分:3)
如果确实想要同时阅读两个文件(这似乎不是您的实际问题 - join
确实是您正确使用的工具你可以在不同的FD上打开它们:
while IFS= read -r -u 4 line1 && IFS= read -r -u 5 line2; do
echo "Line from first file: $line1"
echo "Line from second file: $line2"
done 4<file1 5<file2
答案 1 :(得分:1)
使用join
命令将A和B组合成单个文件C:
$ join A.txt B.txt
john 1 2 3 4 5 6 7 7.5
Ely 10 9 9 9 9 9 9 4.5
Maria 3 5 7 9 2 1 4 3,7
Rox 10 10 10 10 10 10 10 8.5
修改当前脚本以处理此表单中的数据应该很简单。