Команда bash exec делает цикл while слишком много раз? - PullRequest
0 голосов
/ 27 сентября 2018

у меня есть 2 текстовых файла 1.txt и 2.txt.

1.txt состоит из имен и идентификаторов, разделенных вкладкой, например:

Doe,John    123456
Smith,Jack  234678
Green,George987987
West,Mae    444555

2.txtсостоит из идентификаторов и оценок, также разделенных вкладкой, например:

234678  B
123456  A+
444555  B+
987987  C+

Я хочу взять идентификатор из каждой строки в 1.txt, найти 2.txt для соответствия, затем вывести имя иоценка, связанная с этим числом, в новый файл.

ожидаемый результат:

Doe,John A+
Smith,Jack B
Green,GeorgeC+
West,Mae B+

, поэтому я сделал следующее:

>namegrades.txt

exec < $1 #read from 1.txt
while read line
do       #store the name and the id for the current line
    number=$(echo "$line" | cut -d$'\t' -f 2); 
    name=$(echo "$line" | cut -d$'\t' -f 1);
    echo $name # used to test
    exec < $2   #take input from 2.txt
    while read line
    do #store the grade and check the current line in file for a matching id
        grade=$(echo "$line" | cut -d$'\t' -f 2);
        check=$(echo "$line" | grep -c $number)
        echo $check    
        if [ $check == 1 ]; then  #if there is a match echo to new file
    #echo "$name    $grade" >> namegrades.txt
            echo hello   #used to test
        fi
    done < $2
done < $1

когда я запустил код, выводя получаю:

Doe,John
1
hello
0
0
0
123456
1
hello
0
0
0
123456
1
hello
0
0
0

повторяется до бесконечности. Я новичок в Unix и не знаю, как это исправить, любая помощь приветствуется.

1 Ответ

0 голосов
/ 27 сентября 2018

Как насчет этого?
Чтение каждого файла в цикле while через IFS.Сравните ID1 1.txt с id2 2.txt и, если равно, добавьте к третьему файлу.

Это действительно поднимает некоторые обсуждения и объединяет их в качестве решения.

while IFS=$'\t' read -r name id1
do
  while IFS=$'\t' read -r id2 grade
  do
    if [ "$id1" == "$id2" ]; then
      printf '%s\t%s\n' "$name" "$grade"
    fi
  done < /tmp/2.txt
done < /tmp/1.txt |tee -a /tmp/3.txt

Результат

Doe,John     A+
Smith,Jack   B
Green,George C+
West,Mae     B+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...