Могу ли я использовать awk внутри awk в UNIX? - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть два файла. Один содержит студентов и их средний балл с первого семестра, а второй содержит студентов и 5 классов со второго семестра. Я должен обновить первый файл, чтобы он содержал учащихся, отсортированных по среднегодовой оценке. Я новичок в unix, и до сих пор я пытался использовать команду awk внутри awk, но я получаю синтаксическую ошибку. Я пробовал другие способы, но все, что мне удалось сделать, это разделить содержимое файла на строки без прямого доступа ко второму слову (средней оценке) из каждой строки.

входные файлы:

firstsem:

Name1 6
Name2 8
Name3 10

secondsem:

Name1 5 6 5 6 5
Name2 10 10 10 10 10
Name3 2 2 2 2 2

результат:

firstsem:

Name1  5.7
Name3 6
Name2 9

Код:

awk '{
        name = $1
        total=$2+$3+$4+$5+$6;
        avg=total/5;
        print name " " avg
        #sprintf("",nume,avg)
}' < secondsem > secondsemesteravg
# i didn't really want the secondsemesteravg file, but i didn't find another way
while read line; do
       # wanted to get the avg from firstsem
        echo $line | awk '{$2=avgfirstsem + avgsecondsem/2; print $0;}';
done < firstsem

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Я написал такой скрипт с комментариями, которые могут вам помочь:

awk '{
    # calculate avarage of all numbers greater then column 2
    total = 0;
    for (i = 2; i <= NF; ++i) {
        total += $i;
    }
    cur = total / (NF - 1);
}
FNR==NR {
    # first file
    avg[$1] = cur;
}
FNR != NR {
    # second file
    avg[$1] = ( avg[$1] + cur ) / 2
}
END {
    for (i in avg) {
        print i, avg[i]
    }
}' firstsem secondsem
1 голос
/ 08 апреля 2020

Я думаю, что это должно работать более чем для 2 файлов, но не проверял

 $ awk '{k=$1; sum=0; 
         for(i=2;i<=NF;i++) sum+=$i; 
         a[k]=(a[k]*c[k]+sum/(NF-1))/++c[k]} 
    END {for(k in a) print k,a[k]}' file{1,2}

Name1 5.7
Name2 9
Name3 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...