
Ok, espero que este seja o lugar certo para perguntar. Eu tenho 2 arquivos.
O primeiro arquivo possui 4 campos: classe CRN #, Instructor ID #, Class Section #, Number of Students.
Exemplo:
0002 T00005 006 15
0004 T00004 012 26
.
.
etc
O segundo arquivo tem 6 campos (pelo que posso dizer): ID do instrutor, nome, sobrenome, prédio, código de área, número de telefone.
(não tenho certeza se o nome/sobrenome é 1 ou dois campos...)
Exemplo:
T00001 Larry Lastname Corley 555 555-5555
T00002 Ron Lastname Coreley 555 111-1111
.
.
etc
A pergunta que devo responder é: quantas seções cada instrutor ministrou em um determinado semestre? A solução precisa estar na forma de:
# of sections | Instructor ID # | FirstName | LastName
(Eu apenas uso o '|' para demonstração - a solução na verdade usa apenas espaços)
Até agora, eu fiz isso:
$ cat sections/sem092 | sort -k 2 | awk '{ print $2 }' | uniq -c
( sem092
é o primeiro arquivo que mencionei)
E a saída foientãoperto do que eu preciso. Do código acima eu obtive:
Num. of Sections Taught | Instructor ID #
De alguma forma, através de pipes, tenho que combinar o ID # com os nomes do outro arquivo. Tenho uma sensação muito forte de que vou precisar usar grep
. Não procuro ninguém para “segurar minha mão”. Acho isso extremamente interessante, mas acho que perdi alguma coisa no caminho e preciso de um empurrãozinho ou dois.
Responder1
Salve a saída do seu comando:
cat sections/sem092 | sort -k 2 | awk '{ print $2 }' | uniq -c > firstPart.txt
Salve esta linha no arquivo searchInstructorName.sh
:
cat $1 | while read line; do
instructorID=`echo $line | awk '{print $2}'`
name=`grep $instructorID instructorList | awk '{print $2 " " $4}'`
echo "$line $name"
done
Este script assume que essa firtsPart.txt
linha se parece com:
5 T00005
e esse instructorList
é o nome do arquivo com 6 campos.
Finalmente tente:
bash searchInstructorName.sh firstPart.txt
deveria funcionar.
Esta é a versão com um único script:
cat $1 | sort -k 2 | awk '{ print $2 }' | uniq -c | while read line; do
instructorID=`echo $line | awk '{print $2}'`
name=`grep $instructorID $2 | awk '{print $2 " " $4}'`
echo "$line $name"
done
Salve essas linhas searchInstructorInfo.sh
e execute:
bash searchInstructorInfo.sh sections/sem092 instructorList
Responder2
Obrigado por suas respostas detalhadas, Letizia. Usei pedaços do seu código e parte do seu código, por sua vez, me deu mais ideias. Só para não deixar esse post pendurado: meu código final (horrível) acabou assim:
cat sections/sem092 | sort -k 2 | awk '{ print $2 }' | uniq -c > no3
paste instructors | awk '{ print $2 " " $3 }' > no3n
#guess I could have just used cat above
paste no3 no3n
Eu sei que esse código é mortificante - mostrei ao meu professor hoje e ele disse: "Hmm...Deixe-me ver. O que você fez aqui?" lol. Mas depois que ele olhou para ele, ele disse que estava tudo bem. Ele sempre diz: “Há mais de uma maneira de esfolar o proverbial gato”.
Obrigado pela ajuda de todos - nomeadamente Letizia.