1

特定のテキスト フィールドに一致し、特定の形式で出力する割り当て用の bash スクリプトを作成しようとしています。コース番号、タイトル、およびクレジット時間数 (10 進数から整数に変換) を取得して、それを というファイルに出力しようとしていますcourse_list

サンプル入力:

CSC 1010 - COMPUTERS & APPLICATIONS
Computers and Applications. Prerequisite: high school Algebra II. History of computers, hardware components, operating systems, application software, data communication. 
3.000 Credit hours

ここに私が持っているものがあります:

#!/bin/bash
awk '/CSC/ {print $1$2","$4,$5,$6,$7,$8,$9} /[0-9].(000)/ {print substr(","$1,1,2)}' courses.txt | cat >> course_list

これが私が得る出力です:

CSC1010,COMPUTERS & APPLICATIONS   
,3

私が望む出力は次のとおりです。

CSC1010,COMPUTERS & APPLICATIONS,3

私はかなり近いと思っていますが、\n.

4

4 に答える 4

1
$ cat file
CSC 1010 - COMPUTERS & APPLICATIONS
Computers and Applications. Prerequisite: high school Algebra II. History of computers, hardware components, operating systems, application software, data communication.
3.000 Credit hours

$ awk '/CSC/{split($0,a,/ - /); gsub(/ /,"",a[1])} /[0-9].000/{printf "%s,%s,%d\n",a[1],a[2],$1}' file
CSC1010,COMPUTERS & APPLICATIONS,3
于 2013-03-09T10:39:39.080 に答える
0
awk '{print $1$2","$4,$5,$6","$(NF-2)}' RS= course_list

説明:

NFフィールド数を格納する内部変数です。$NF最後のフィールドの値を保持します。OPは、位置にあるコース時間をキャプチャしたいのでNF-2、それを印刷します。

于 2013-03-08T06:07:28.850 に答える
0

@Powdercake、はい、それは近いです。に変更{print substr(","$1,1,2)}して(デフォルトの)数値形式{print $1+0}に強制$1します(@John Zwinckが言及したようなパイプと猫のものを除外します)

于 2013-03-08T08:41:47.647 に答える
0

sed を使用:

sed -n 's/CSC[^-]*-[ ]*\([^\.]*\).*\([0-9][0-9]*\)\.000[ ]*Credit.*/\1,\2/p' input
于 2013-03-08T03:07:57.567 に答える