How to read from two files in the same time shell

2020-03-31 05:13发布

I have two files,

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

What i want to do is create another file with only the persons who have in file A their average greater or equal with the 8.5 and in B their mark also greater or equal to 8.5, so in my example the C file would contain only Rox because only she fulfil the criteria.

I have this

#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

so I have in the temp.txt files the persons who fulfil the criteria for file A but my question is how can i compare them with the persons from filename2 and create "results" from them ? I've tried with two while loops but i get an error, could someone please help ? Thanks!

2条回答
萌系小妹纸
2楼-- · 2020-03-31 06:05

Use the join command to combine A and B into a single file 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

It should be simple to modify your current script to process the data in this form.

查看更多
来,给爷笑一个
3楼-- · 2020-03-31 06:08

If you really want to read two files at the same time (which doesn't appear to be your actual question -- join is indeed the right tool for what you're doing), you can open them on different FDs:

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
查看更多
登录 后发表回答