我需要從下表中搜索每個學生出勤的價值,并需要對每個學生的出勤進行總結。
我在 file_dump.txt 中有一個包含以下資料的檔案轉儲
[days Leaves PERCENTAGE student_attendance]
194 1.3 31.44% student1.entry2
189 1.3 30.63% student2._student2
138 0.9 22.37% student3.entry2
5 0.0 0.81% student3._student3
5 0.0 0.81% student1._student1
我需要使用 linux 命令(grep 或其他命令)從上表中搜索 student1 資料,然后將 student1.entry2 和 student1._student1 求和,即(194 5 = 199)。
如何使用 linux 命令列執行此操作?
uj5u.com熱心網友回復:
Awk 非常適合這樣的小型編程任務。
awk -v student="student1" '$4 ~ "^" student "\." { sum = $1 }
END { print sum }' file
該-v選項允許您從命令列為 Awk 變數傳入一個值;我們這樣做是為了為變數提供一個值student。第一行檢查第四個欄位是否$4以該變數開頭,后跟一個點,如果是,則將第一個欄位添加$1到變數中sum。(方便的是,未初始化的變數會以默認值零/空字串激活。)這對于檔案中的每個輸入行都會重復。然后在END輸入檔案用完后執行該塊,并列印累積的總和。
如果要將其保存在可執行腳本中,您可能希望允許呼叫者指定要搜索的學生:
#!/bin/sh
# Fail if $1 is unset
: ${1?Syntax: $0 studentname}
awk -v student="$1" '$4 ~ "^" student "\." { sum = $1 }
END { print sum }' file
請注意$單引號內的變數如何是 Awk 欄位名稱(單引號保護腳本的內容免受 shell 的變數插值等工具的影響),而帶有雙引號的變數被 shell 替換為第一個命令的值 -線引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/359453.html
