Shell script

1.檢查文件是否存在,且不爲空

[ -f 「input.txt」 ]&&[ -s 「input.txt」 ]&&echo 「input.txt exists and contains characters」

[]即判斷語法,沒必要用ifbash

注意[]先後必須有空格,各部分再由空格隔開,命令格式如此,不照作,就報錯。app

&& || 邏輯運算符可用來代替then else。對於與操做符而言,前爲真,則執行後面;對於或操做符而言,前爲假,則執行後面spa

 

2.文件有200行,打印出第20到第50行

#!/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

 

3.把文本里的apple替換爲Apple

sed -i ‘s/apple/Apple/’ input.txt

sed即stram editor,用戶沒必要打開文件就可直接修改文件,參數-i是讓修改直接做用於文件上數學

‘’是命令區,s表示替換,前爲待替換字符串,後爲替換字符串,記得最後也要有/it

 

4.有文本以製表符隔開,以下:

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)

相關文章
相關標籤/搜索