日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

嵌入式開發(fā)linux awk命令深度詳解

出處:電子發(fā)燒友 發(fā)布于:2018-09-20 14:21:59

在我們初學(xué)嵌入式開發(fā)的時候,總會出現(xiàn)一個問題。那就是C語言和嵌入式C編程有什么區(qū)別?而嵌入式工程師一般都會告訴你,其區(qū)別在于嵌入式的C語言是跑在嵌入式的開發(fā)板上的,CPU和電腦不一樣,所以編譯器也是不一樣的,生成的可執(zhí)行程序也是不一樣的。不同于一般形式的軟件編程,基于特定的硬件平臺嵌入式系統(tǒng)編程的,勢必要求其編程語言具備較強(qiáng)的硬件直接操作能力。毫無疑問,匯編語言是具備這種特點的。然而,由于該語言編寫開發(fā)過程的復(fù)雜性,通常不選擇它用于嵌入式系統(tǒng)開發(fā),而C語言是一種“低層次”的語言,已經(jīng)成為嵌入式系統(tǒng)開發(fā)的選擇。
  

  一、首先我們要明白嵌入式系統(tǒng)不是PC系統(tǒng),是另一種獨立操作系統(tǒng)。它包括硬件和軟件兩部分。硬件包括處理器/微處理器、存儲器及外設(shè)器件和I/O端口、圖形控制器等。軟件部分包括操作系統(tǒng)軟件(OS)(要求實時和多任務(wù)操作)和應(yīng)用程序編程,有時設(shè)計人員把這兩種軟件組合在一起。應(yīng)用程序控制著系統(tǒng)的運作和行為;而操作系統(tǒng)控制著應(yīng)用程序編程與硬件的交互作用。
  二、嵌入式微處理器是嵌入式系統(tǒng)控制。嵌入式微處理器主要功能有四大點a:
  1、對實時多任務(wù)有很強(qiáng)的支持能力,能完成多任務(wù)并且有較短的中斷響應(yīng)時間,從而使內(nèi)部的代碼和實時內(nèi)的執(zhí)行時間減少到限度。
  2、嵌入式微處理器必須功耗很低,尤其是用于便攜式的無線及移動的計算和通信設(shè)備中靠電池供電的嵌入式系統(tǒng),如需要功耗只有mW甚至μW級。
  3、具有功能很強(qiáng)的存儲區(qū)保護(hù)功能。這是由于嵌入式系統(tǒng)的軟件結(jié)構(gòu)已經(jīng)模塊化,而為了避免在軟件模塊之間出現(xiàn)錯誤的交叉作用,需要設(shè)計強(qiáng)大的存儲區(qū)保護(hù)功能,同時也有利于軟件診斷。
  4、可擴(kuò)展的處理器結(jié)構(gòu),以便能迅速地開發(fā)出滿足應(yīng)用的性能的嵌入式微處理器。
  三、而嵌入式系統(tǒng)有別于其他操作系統(tǒng)的競爭力有六大特點:
  1、嵌入式系統(tǒng)為了提高執(zhí)行速度和系統(tǒng)可靠性,嵌入式系統(tǒng)中的軟件一般都固化在存儲器芯片或單片機(jī)本身中,而不是存貯于磁盤等載體中。
  2、嵌入式系統(tǒng)的硬件和軟件都必須高效率地設(shè)計,量體裁衣、去除冗余,力爭在同樣的硅片面積上實現(xiàn)更高的性能,這樣才能在具體應(yīng)用中對處理器的選擇更具有競爭力。
  3、嵌入式系統(tǒng)是將先進(jìn)的計算機(jī)技術(shù)、半導(dǎo)體技術(shù)和電子技術(shù)與各個行業(yè)的具體應(yīng)用相結(jié)合后的產(chǎn)物。這一點就決定了它必然是一個技術(shù)密集、資金密集、高度分散、不斷創(chuàng)新的知識集成系統(tǒng)。
  4、嵌入式系統(tǒng)本身不具備自舉開發(fā)能力,即使設(shè)計完成以后用戶通常也是不能對其中的程序功能進(jìn)行修改的,必須有一套開發(fā)工具和環(huán)境才能進(jìn)行開發(fā)。
  5、嵌入式系統(tǒng)通常是面向特定應(yīng)用的嵌入式CPU,與通用型的不同就是嵌入式CPU大多工作在為特定用戶群設(shè)計的系統(tǒng)中,它通常都具有低功耗、體積小、集成度高等特點,能夠把通用CPU中許多由板卡完成的任務(wù)集成在芯片內(nèi)部,從而有利于嵌入式系統(tǒng)設(shè)計趨于小型化,移動能力大大增強(qiáng),跟網(wǎng)絡(luò)的耦合也越來越緊密。
  6、嵌入式系統(tǒng)和具體應(yīng)用有機(jī)地結(jié)合在一起,它的升級換代也是和具體產(chǎn)品同步進(jìn)行,因此嵌入式系統(tǒng)產(chǎn)品一旦進(jìn)入市場,具有較長的生命周期。
  linux awk命令詳解
  awk是行處理器: 相比較屏幕處理的優(yōu)點,在處理龐大文件時不會出現(xiàn)內(nèi)存溢出或是處理緩慢的問題,通常用來格式化文本信息
  awk處理過程: 依次對每一行進(jìn)行處理,然后輸出
  awk命令形式:
  awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file
 ?。?F|-f|-v] 大參數(shù),-F指定分隔符,-f調(diào)用腳本,-v定義變量 var=value
  ‘ ’ 引用代碼塊
  BEGIN 初始化代碼塊,在對每一行進(jìn)行處理之前,初始化代碼,主要是引用全局變量,設(shè)置FS分隔符
  // 匹配代碼塊,可以是字符串或正則表達(dá)式
  {} 命令代碼塊,包含一條或多條命令
 ??; 多條命令使用分號分隔
  END 結(jié)尾代碼塊,在對每一行進(jìn)行處理之后再執(zhí)行的代碼塊,主要是進(jìn)行終計算或輸出結(jié)尾摘要信息
  特殊要點:
  $0 表示整個當(dāng)前行
  $1 每行個字段
  NF 字段數(shù)量變量
  NR 每行的記錄號,多文件記錄遞增
  FNR 與NR類似,不過多文件記錄不遞增,每個文件都從1開始
  \t 制表符
  \n 換行符
  FS BEGIN時定義分隔符
  RS 輸入的記錄分隔符, 默認(rèn)為換行符(即文本是按一行一行輸入)
  ~ 匹配,與==相比不是比較
 ?。 不匹配,不比較
  == 等于,必須全部相等,比較
 ?。? 不等于,比較
  &&  邏輯與
  || 邏輯或
  + 匹配時表示1個或1個以上
  /[0-9][0-9]+/ 兩個或兩個以上數(shù)字
  /[0-9][0-9]*/ 一個或一個以上數(shù)字
  FILENAME 文件名
  OFS 輸出字段分隔符, 默認(rèn)也是空格,可以改為制表符等
  ORS 輸出的記錄分隔符,默認(rèn)為換行符,即處理結(jié)果也是一行一行輸出到屏幕
  -F‘[:#/]’ 定義三個分隔符
  print & $0
  print 是awk打印指定內(nèi)容的主要命令
  awk ‘{print}’ /etc/passwd == awk ‘{print $0}’ /etc/passwd
  awk ‘{print “ ”}’ /etc/passwd //不輸出passwd的內(nèi)容,而是輸出相同個數(shù)的空行,進(jìn)一步解釋了awk是一行一行處理文本
  awk ‘{print “a”}’ /etc/passwd //輸出相同個數(shù)的a行,一行只有一個a字母
  awk -F“:” ‘{print $1}’ /etc/passwd
  awk -F: ‘{print $1; print $2}’ /etc/passwd //將每一行的前二個字段,分行輸出,進(jìn)一步理解一行一行處理文本
  awk -F: ‘{print $1,$3,$6}’ OFS=“\t” /etc/passwd //輸出字段1,3,6,以制表符作為分隔符
  -f指定腳本文件
  awk -f script.awk file
  BEGIN{
  FS=“:”
  }
  {print $1} //效果與awk -F“:” ‘{print $1}’相同,只是分隔符使用FS在代碼自身中指定
  awk ‘BEGIN{X=0} /^$/{ X+=1 } END{print “I find”,X,“blank lines.”}’ test
  I find 4 blank lines.
  ls -l|awk ‘BEGIN{sum=0} !/^d/{sum+=$5} END{print “total size is”,sum}’ //計算文件大小
  total size is 17487
  -F指定分隔符
  $1 指指定分隔符后,個字段,$3第三個字段, \t是制表符
  一個或多個連續(xù)的空格或制表符看做一個定界符,即多個空格看做一個空格
  awk -F“:” ‘{print $1}’ /etc/passwd
  awk -F“:” ‘{print $1 $3}’ /etc/passwd //$1與$3相連輸出,不分隔
  awk -F“:” ‘{print $1,$3}’ /etc/passwd //多了一個逗號,$1與$3使用空格分隔
  awk -F“:” ‘{print $1 “ ” $3}’ /etc/passwd //$1與$3之間手動添加空格分隔
  awk -F“:” ‘{print “Username:” $1 “\t\t Uid:” $3 }’ /etc/passwd //自定義輸出
  awk -F: ‘{print NF}’ /etc/passwd //顯示每行有多少字段
  awk -F: ‘{print $NF}’ /etc/passwd //將每行第NF個字段的值打印出來
  awk -F: ‘NF==4 {print }’ /etc/passwd //顯示只有4個字段的行
  awk -F: ‘NF》2{print $0}’ /etc/passwd //顯示每行字段數(shù)量大于2的行
  awk ‘{print NR,$0}’ /etc/passwd //輸出每行的行號
  awk -F: ‘{print NR,NF,$NF,“\t”,$0}’ /etc/passwd //依次打印行號,字段數(shù),字段值,制表符,每行內(nèi)容
  awk -F: ‘NR==5{print}’ /etc/passwd //顯示第5行
  awk -F: ‘NR==5 || NR==6{print}’ /etc/passwd //顯示第5行和第6行
  route -n|awk ‘NR!=1{print}’ //不顯示行
  //匹配代碼塊
  //純字符匹配 !//純字符不匹配 ~//字段值匹配 !~//字段值不匹配 ~/a1|a2/字段值匹配a1或a2
  awk ‘/mysql/’ /etc/passwd
  awk ‘/mysql/{print }’ /etc/passwd
  awk ‘/mysql/{print $0}’ /etc/passwd //三條指令結(jié)果一樣
  awk ‘!/mysql/{print $0}’ /etc/passwd //輸出不匹配mysql的行
  awk ‘/mysql|mail/{print}’ /etc/passwd
  awk ‘!/mysql|mail/{print}’ /etc/passwd
  awk -F: ‘/mail/,/mysql/{print}’ /etc/passwd //區(qū)間匹配
  awk ‘/[2][7][7]*/{print $0}’ /etc/passwd //匹配包含27為數(shù)字開頭的行,如27,277,2777.。。
  awk -F: ‘$1~/mail/{print $1}’ /etc/passwd //$1匹配指定內(nèi)容才顯示
  awk -F: ‘{if($1~/mail/) print $1}’ /etc/passwd //與上面相同
  awk -F: ‘$1!~/mail/{print $1}’ /etc/passwd //不匹配
  awk -F: ‘$1!~/mail|mysql/{print $1}’ /etc/passwd
  IF語句
  必須用在{}中,且比較內(nèi)容用()擴(kuò)起來
  awk -F: ‘{if($1~/mail/) print $1}’ /etc/passwd //簡寫
  awk -F: ‘{if($1~/mail/) {print $1}}’ /etc/passwd //全寫
  awk -F: ‘{if($1~/mail/) {print $1} else {print $2}}’ /etc/passwd //if.。.else.。。
  條件表達(dá)式
  == != 》 》=
  awk -F“:” ‘$1==“mysql”{print $3}’ /etc/passwd
  awk -F“:” ‘{if($1==“mysql”) print $3}’ /etc/passwd //與上面相同
  awk -F“:” ‘$1!=“mysql”{print $3}’ /etc/passwd //不等于
  awk -F“:” ‘$3》1000{print $3}’ /etc/passwd //大于
  awk -F“:” ‘$3》=100{print $3}’ /etc/passwd //大于等于
  awk -F“:” ‘$3《1{print $3}’ /etc/passwd //小于
  awk -F“:” ‘$3《=1{print $3}’ /etc/passwd //小于等于
  邏輯運算符
  && ||
  awk -F: ‘$1~/mail/ && $3》8 {print }’ /etc/passwd //邏輯與,$1匹配mail,并且$3》8
  awk -F: ‘{if($1~/mail/ && $3》8) print }’ /etc/passwd
  awk -F: ‘$1~/mail/ || $3》1000 {print }’ /etc/passwd //邏輯或
  awk -F: ‘{if($1~/mail/ || $3》1000) print }’ /etc/passwd
  數(shù)值運算
  awk -F: ‘$3 》 100’ /etc/passwd
  awk -F: ‘$3 》 100 || $3 《 5’ /etc/passwd
  awk -F: ‘$3+$4 》 200’ /etc/passwd
  awk -F: ‘/mysql|mail/{print $3+10}’ /etc/passwd //第三個字段加10打印
  awk -F: ‘/mysql/{print $3-$4}’ /etc/passwd //減法
  awk -F: ‘/mysql/{print $3*$4}’ /etc/passwd //求乘積
  awk ‘/MemFree/{print $2/1024}’ /proc/meminfo //除法
  awk ‘/MemFree/{print int($2/1024)}’ /proc/meminfo //取整
  輸出分隔符OFS
  awk ‘$6 ~ /FIN/ || NR==1 {print NR,$4,$5,$6}’ OFS=“\t” netstat.txt
  awk ‘$6 ~ /WAIT/ || NR==1 {print NR,$4,$5,$6}’ OFS=“\t” netstat.txt
  //輸出字段6匹配WAIT的行,其中輸出每行行號,字段4,5,6,并使用制表符分割字段
  輸出處理結(jié)果到文件
 ?、僭诿畲a塊中直接輸出 route -n|awk ‘NR!=1{print 》 “。/fs”}’
 ?、谑褂弥囟ㄏ蜻M(jìn)行輸出 route -n|awk ‘NR!=1{print}’ 》 。/fs
  格式化輸出
  netstat -anp|awk ‘{printf “%-8s %-8s %-10s\n”,$1,$2,$3}’
  printf表示格式輸出
  %格式化輸出分隔符
  -8長度為8個字符
  s表示字符串類型
  打印每行前三個字段,指定個字段輸出字符串類型(長度為8),第二個字段輸出字符串類型(長度為8),
  第三個字段輸出字符串類型(長度為10)
  netstat -anp|awk ‘$6==“LISTEN” || NR==1 {printf “%-10s %-10s %-10s \n”,$1,$2,$3}’
  netstat -anp|awk ‘$6==“LISTEN” || NR==1 {printf “%-3s %-10s %-10s %-10s \n”,NR,$1,$2,$3}’
  IF語句
  awk -F: ‘{if($3》100) print “l(fā)arge”; else print “small”}’ /etc/passwd
  small
  small
  small
  large
  small
  small
  awk -F: ‘BEGIN{A=0;B=0} {if($3》100) {A++; print “l(fā)arge”} else {B++; print “small”}} END{print A,“\t”,B}’ /etc/passwd
  //ID大于100,A加1,否則B加1
  awk -F: ‘{if($3《100) next; else print}’ /etc/passwd //小于100跳過,否則顯示
  awk -F: ‘BEGIN{i=1} {if(i《NF) print NR,NF,i++ }’ /etc/passwd
  awk -F: ‘BEGIN{i=1} {if(i《NF) {print NR,NF} i++ }’ /etc/passwd
  另一種形式
  awk -F: ‘{print ($3》100 ? “yes”:“no”)}’ /etc/passwd
  awk -F: ‘{print ($3》100 ? $3“:\tyes”:$3“:\tno”)}’ /etc/passwd
  while語句
  awk -F: ‘BEGIN{i=1} {while(i《NF) print NF,$i,i++}’ /etc/passwd
  7 root 1
  7 x 2
  7 0 3
  7 0 4
  7 root 5
  7 /root 6
  數(shù)組
  netstat -anp|awk ‘NR!=1{a[$6]++} END{for (i in a) print i,“\t”,a[i]}’
  netstat -anp|awk ‘NR!=1{a[$6]++} END{for (i in a) printf “%-20s %-10s %-5s \n”, i,“\t”,a[i]}’
  9523 1
  9929 1
  LISTEN 6
  7903 1
  3038/cupsd 1
  7913 1
  10837 1
  9833 1
  應(yīng)用1
  awk -F: ‘{print NF}’ helloworld.sh //輸出文件每行有多少字段
  awk -F: ‘{print $1,$2,$3,$4,$5}’ helloworld.sh //輸出前5個字段
  awk -F: ‘{print $1,$2,$3,$4,$5}’ OFS=‘\t’ helloworld.sh //輸出前5個字段并使用制表符分隔輸出
  awk -F: ‘{print NR,$1,$2,$3,$4,$5}’ OFS=‘\t’ helloworld.sh //制表符分隔輸出前5個字段,并打印行號
  應(yīng)用2
  awk -F‘[:#]’ ‘{print NF}’ helloworld.sh //指定多個分隔符: #,輸出每行多少字段
  awk -F‘[:#]’ ‘{print $1,$2,$3,$4,$5,$6,$7}’ OFS=‘\t’ helloworld.sh //制表符分隔輸出多字段
  應(yīng)用3
  awk -F‘[:#/]’ ‘{print NF}’ helloworld.sh //指定三個分隔符,并輸出每行字段數(shù)
  awk -F‘[:#/]’ ‘{print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12}’ helloworld.sh //制表符分隔輸出多字段
  應(yīng)用4
  計算/home目錄下,普通文件的大小,使用KB作為單位
  ls -l|awk ‘BEGIN{sum=0} !/^d/{sum+=$5} END{print “total size is:”,sum/1024,“KB”}’
  ls -l|awk ‘BEGIN{sum=0} !/^d/{sum+=$5} END{print “total size is:”,int(sum/1024),“KB”}’ //int是取整的意思
  應(yīng)用5
  統(tǒng)計netstat -anp 狀態(tài)為LISTEN和CONNECT的連接數(shù)量分別是多少
  netstat -anp|awk ‘$6~/LISTEN|CONNECTED/{sum[$6]++} END{for (i in sum) printf “%-10s %-6s %-3s \n”, i,“ ”,sum[i]}’
  應(yīng)用6
  統(tǒng)計/home目錄下不同用戶的普通文件的總數(shù)是多少?
  ls -l|awk ‘NR!=1 && !/^d/{sum[$3]++} END{for (i in sum) printf “%-6s %-5s %-3s \n”,i,“ ”,sum[i]}’
  mysql 199
  root 374
  統(tǒng)計/home目錄下不同用戶的普通文件的大小總size是多少?
  ls -l|awk ‘NR!=1 && !/^d/{sum[$3]+=$5} END{for (i in sum) printf “%-6s %-5s %-3s %-2s \n”,i,“ ”,sum[i]/1024/1024,“MB”}’
  應(yīng)用7
  輸出成績表
  awk ‘BEGIN{math=0;eng=0;com=0;printf “Lineno. Name No. Math English Computer Total\n”;printf “------------------------------------------------------------\n”}{math+=$3; eng+=$4; com+=$5;printf “%-8s %-7s %-7s %-7s %-9s %-10s %-7s \n”,NR,$1,$2,$3,$4,$5,$3+$4+$5} END{printf “------------------------------------------------------------\n”;printf “%-24s %-7s %-9s %-20s \n”,“Total:”,math,eng,com;printf “%-24s %-7s %-9s %-20s \n”,“Avg:”,math/NR,eng/NR,com/NR}’ test0
  Marry 2143 78 84 77
  Jack 2321 66 78 45
  Tom 2122 48 77 71
  Mike 2537 87 97 95
  Bob 2415 40 57 62

 

關(guān)鍵詞:嵌入式開發(fā)linux awk命令深度詳解linux awk,嵌入式

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!