あるファイルの数を別のファイルの名前と一致させるには?

あるファイルの数を別のファイルの名前と一致させるには?

まあ、ここが尋ねるところではないかと思います。 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

instructorList6つのフィールドで構成されるファイル名。

最後の試み:

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

おすすめ記事