
まあ、ここが尋ねるところではないかと思います。 2つのファイルがあります。
最初のファイルには、クラスCRN番号、教師ID番号、クラスセクション番号、学生数など4つのフィールドがあります。
例:
0002 T00005 006 15
0004 T00004 012 26
.
.
etc
2番目のファイルには、(私が知っている限り)教師ID番号、名前、姓、建物、市外局番、電話番号など6つのフィールドがあります。
(名前/姓が1つか2つのフィールドかわからない...)
例:
T00001 Larry Lastname Corley 555 555-5555
T00002 Ron Lastname Coreley 555 111-1111
.
.
etc
私が答えたい質問は次のとおりです。各講師は特定の学期にいくつのセクションを教えていますか?ソリューションは次の形式でなければなりません。
# of sections | Instructor ID # | FirstName | LastName
(デモンストレーションには「|」を使用しています。ソリューションは実際には空白のみを使用します。)
これまで私はこれをしました:
$ cat sections/sem092 | sort -k 2 | awk '{ print $2 }' | uniq -c
(sem092
私が言及した最初のファイルです)
出力は次のとおりですだから私が必要なものに近い。上記のコードから以下を取得します。
Num. of Sections Taught | Instructor ID #
どういうわけか、パイプを介してID#を他のファイルの名前と一致させる必要があります。私は「私の手をつかむ」人をgrep
探していません。私はこれは非常に興味深いと思いましたが、途中で何かを逃し、1つか2つの推進力が必要だと思います。
答え1
コマンドの出力を保存します。
cat sections/sem092 | sort -k 2 | awk '{ print $2 }' | uniq -c > firstPart.txt
次の行をファイルに保存します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
スクリプトは、firtsPart.txt
その行が次のようになると仮定します。
5 T00005
instructorList
6つのフィールドで構成されるファイル名。
最後の試み:
bash searchInstructorName.sh firstPart.txt
動作する必要があります。
単一のスクリプトを含むバージョンは次のとおりです。
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
次の行を保存し、searchInstructorInfo.sh
次を実行します。
bash searchInstructorInfo.sh sections/sem092 instructorList
答え2
詳細な回答をいただいた Letizia に感謝します。私はあなたのコードのいくつかを使用し、あなたのコードのいくつかは私にもっとアイデアを与えました。この投稿を残さないようにするために:私の最終的な(ひどい)コードは次のようになりました。
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
このコードが気分が悪いことがわかります。今日教授様にお見せしたところ「まあ…どこで見よう。ここで何をするの?」と言いました。ところで見てみると大丈夫だと言いました。彼はいつも「猫が皮をむく方法はいくつかあります」と言いました。
助けてくださった皆さん、Letiziaに感謝します。