我有一個帶有分數的學生串列的文本檔案,我想找出其中有多少學生在數學、物理和數學和物理的總和中獲得了超過 80 分。執行此操作的 Linux 命令應該是什么?
文本檔案在這里:
#name maths phy
Manila 78 29
Shikhar 49 78
Vandana 65 87
Priyansh 75 22
Bina 52 69
Chitransh 98 93
William 88 73
Kaushal 38 85
Dilruba 65 94
Lalremruata 34 45
Qasim 58 62
Nitya 81 89
Jennita 96 91
Shobha 71 63
Talim 77 88
uj5u.com熱心網友回復:
這可以使用awk(不要使用grep,因為這不適合數字算術)來實作。一個例子:
cat test.txt | awk '{if ($2>80 || $3>80) print $1 " " $2 " " $3}'
這需要改進:如何洗掉cat命令,如何檢查兩列的總和,為什么存在標題,...?但至少你有一些開始。
uj5u.com熱心網友回復:
試試這個,并根據你的口味調整它:
$ awk '/^[^#]/{
limit = 80;
comb = $2 $3;
if ($2 > limit && $3 > limit)
print $1, $2, $3, "both";
else if ($2 > limit)
print $1, $2, $3, "maths";
else if ($3 > limit)
print $1, $2, $3, "physics";
else if (comb > limit)
print $1, $2, $3, "combined";
}' <<EOF
#name maths phy
Manila 78 29
Shikhar 49 78
Vandana 65 87
Priyansh 75 22
Bina 52 69
Chitransh 98 93
William 88 73
Kaushal 38 85
Dilruba 65 94
Lalremruata 34 45
Qasim 58 62
Nitya 81 89
Jennita 96 91
Shobha 71 63
Talim 77 88
EOF
產生以下內容:
Manila 78 29 combined
Shikhar 49 78 combined
Vandana 65 87 physics
Priyansh 75 22 combined
Bina 52 69 combined
Chitransh 98 93 both
William 88 73 maths
Kaushal 38 85 physics
Dilruba 65 94 physics
Qasim 58 62 combined
Nitya 81 89 both
Jennita 96 91 both
Shobha 71 63 combined
Talim 77 88 physics
如果您希望從檔案中讀取它,則將其用作:
$ awk '/^[^#]/{
limit = 80;
comb = $2 $3;
if ($2 > limit && $3 > limit)
print $1, $2, $3, "both";
else if ($2 > limit)
print $1, $2, $3, "maths";
else if ($3 > limit)
print $1, $2, $3, "physics";
else if (comb > limit)
print $1, $2, $3, "combined";
}' marks.txt
awk腳本_
- 將讀取第一列中沒有的所有行
#,這將允許您引入評論,作為帶有課程名稱的標題。 - 將允許您輕松配置觸發級別,因為限制變數在一個地方初始化并用作常量。
- 您可以將標準調整為您想要獲得的內容,即使是沒有通過任何兩門課程的學生。
筆記:
如果要在awk腳本內部進行變數替換,請注意awk使用$<n>符號來參考輸入的單詞,它也被shell使用和擴展,因此您需要進行shell變數擴展,最好的方法是關閉單引號并在僅要擴展的變數上打開雙引號,這樣您就不會混淆哪個變數將由 shell 擴展,哪個變數由awk. 例子:
$ export TRIGGER=95
$ awk '/^[^#]/{
limit = '"$TRIGGER"';
comb = $2 $3;
if ($2 > limit && $3 > limit)
print $1, $2, $3, "both";
else if ($2 > limit)
print $1, $2, $3, "maths";
else if ($3 > limit)
print $1, $2, $3, "physics";
else if (comb > limit)
print $1, $2, $3, "combined";
}'
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/422273.html
標籤:
