[ -f 「input.txt」 ]&&[ -s 「input.txt」 ]&&echo 「input.txt exists and contains characters」
[]即判斷語法,沒必要用ifbash
注意[]先後必須有空格,各部分再由空格隔開,命令格式如此,不照作,就報錯。app
&& || 邏輯運算符可用來代替then else。對於與操做符而言,前爲真,則執行後面;對於或操做符而言,前爲假,則執行後面spa
#!/bin/bash i=1 while read line do [ $i -ge 20 ]&&[ $i -le 50 ]&&echo $line i=$(($i+1)) done<input.txt
先設置一個行計數器,再讀取文件的每一行,判斷行號是否是大於等於20,且小於等於50,是的話就打印出該行 blog
<是逆向管道符排序
line只是變量,read後也可寫其它名字,並不是必須這麼命名字符串
定義的變量,要想使用,須加上$input
sed -i ‘s/apple/Apple/’ input.txt
sed即stram editor,用戶沒必要打開文件就可直接修改文件,參數-i是讓修改直接做用於文件上數學
‘’是命令區,s表示替換,前爲待替換字符串,後爲替換字符串,記得最後也要有/it
David Math 95
Lily English 90
Lily Biology 83
Bob Biology 85
David English 88
Bob Math 87
1)問有多少學生?
io
cat input.txt|awk ‘{print $1}’|sort -u|wc -l
讀入文件,結果給awk,只打印出第一列名字的字符,再進行去重(參數 -u)排序,再交給wc統計有多少行(參數 -l),即學生數量
2)誰英語成績最好,並由低到高排序
cat input.txt|grep ‘English’|sort -r -k3
讀入文件,結果給grep,找出包含English的行,再給sort,逆序排列(參數-r),鍵是第三列(參數-k3)
3)計算數學平均成績
cat input.txt|grep ‘Math’|awk ‘{sum+=$NF}END{print sum/NR}’
讀入文件,結果給grep,找出包含Math的行,再給awk,取每行最後一列的值,累加求和,所有處理後(END),用成績之和除以記錄數(NR,即number of records)