1

私は2つのファイルを持っています、

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の人と比較して、それらから「結果」を作成するにはどうすればよいですか?2つのwhileループを試しましたが、エラーが発生しました。誰か助けてもらえますか?ありがとう!

4

2 に答える 2

5

本当に同時に2つのファイルを読みたい場合(実際の質問ではないようですが、実際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
于 2013-03-26T18:24:41.900 に答える
2

次のコマンドを使用しjoinて、AとBを1つのファイル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

この形式のデータを処理するように現在のスクリプトを変更するのは簡単なはずです。

于 2013-03-26T18:22:10.793 に答える