linux高級文件數據操做

cat :顯示切割數據java

-f:選擇顯示切割列;shell

-s:比現實沒有分割的行編程

-d:自定義分隔符編程語言

cut -d ‘  ’-f 1,3  a.txt : 以空格爲分隔符顯示第一列和第三列;這種狀況不能分隔的行也會顯示出來,若是不須要能夠加一個-s,以下所示:編輯器

cut  -d ' ' -s -f 1,3  a.txt函數

sort :文件數據排序工具

-n:按數值排序spa

-r:降序;blog

-t:自定義分隔符;排序

-k : 選擇拍序列;

-f :忽略大小寫;

- u:合併相同行;

 sort -t ‘  ’ -k2 -nr  sort.txt  :sort.txt中 以空格爲分隔符的第二列按數值降序排序,若是沒指定按數值排序則默認是按ascii碼排序

wc統計數據 :

wc -l sort.txt  統計sort.txt文件行數,也可用以下命令:

cat sort.txt | wc -l  先讀文件但不顯示,再經過管道命令 |  拼接一個統計命令 wc -l;

ll  /etc  | wc -l   統計etc目錄下有多少文件;

sed行編輯器:

-d:刪除符合條件的行;

-p:顯示符合條件的行;

-a\string:在符合條件的行下面添加一行,內容爲string;

- \n:用於換行;

-i\string :在符合條件的行上面添加一行,內容爲string;

-r file :將指定文件內容添加至符合條件行處;

-w file:將制定範圍的行另存到指定文件;

-s/pattern/string/修飾符 查找並替換,默認之替換第一次匹配到的地方;

     g:行內全局替換

     i:忽略大小寫

     s///,  s###,s@@@查找並替換

sed -i  1a\hello word  a.txt  在a.txt中第一行後添加新行,內容爲hello word(-i直接修改原文件,不添加不能生效)

sed  2d  a.txt  刪除第二行

sed  /hello/d  a.txt  刪除包含hello的行;

sed  /[0-9]/d  a.txt  刪除包含數字0-9的行

sed  -n  /[0-9]/p a.txt  顯示包含數字0-9的行(-n靜默模式)  也能夠用這個  grep 「[0-9]」a.txt;

sed  s/aa/bb aa/ a.txt  查找aa 並將其替換成 bb  aa,亦可用於在某個字符串前添加bb

awk強大的文本分析工具(逐行讀入,按空格,製表符分隔將每行切片,再對切開部分分析處理,生成報告):

awk -F':'‘{print $1}’ passwd  打印passwd中以:分隔的第一列數據  等價於cut -d‘:’-f1 a.txt命令;

awk -F‘:’'{print $1,$7}' passwd 打印第一列和第七列

awk  -F':'  'BEGIN{print "name\tshell"}  {print $1 "\t" $7}   END{print "end==========="} '  passwd

解析:BEGIN{print "name\tshell"} 此函數體 表示 首行打印name  shell,\t表示以製表符分隔;

          {print $1 "\t" $7} 表示 打印 第1列 製表符分隔  第7列;

          END{print "end===="} 表示 在最後一行打印 end======;

awk '/root/{ print $0}' passwd  表示查找passwd中出現root的行,$0表明打印出整行數據

awk -F':'  '{print NR+"\t"NF+"\t"$0}'  passwd   打印行號(NR)、列數(NF)、整行信息

awk  '{ split($3,date,"-");if(date[2]=="01"){name[$1]+=$5}} END{for(i in name){print i"\t"name[i]^C} }' passwd 可實現以下結果:

         

{ split($3,date,"-");if(date[2]=="01"){name[$1]+=$5}} 函數體中首先切割第三列日期列,若是月份爲01,則將數據放入map結構中,key爲$1,值name[$1]爲$5,name[$1]+=$5這一句比java語法要簡單,取key爲$1對應的value再加上$5,此時若是集合裏沒有該姓名的數據則會新增一條,有的話則會在原基礎上相加(注:awk是將數據逐行讀入處理的!$1表示這行的第$1列的值,$5同理)

END{for(i in name){print i"\t"name[i]^C} } 這一步是遍歷循環上一步獲得的map,打印名字和工資;若是咱們想將0表示爲經理m,1表示爲員工w,以下圖所示,該怎麼作呢?

awk  '  { split($3,date,"-");if(date[2]=="01"){name[$1]+=$5}}    {if($2="0"){roles[$1]='M'}else{role[$1]="W"}}    END{for(i in name){print i"\t"name[i]"\t"roles[i]} }  ' passwd

咱們能夠再加一個函數體  {if($2="0"){roles[$1]='M'}else{role[$1]="W"}} ,將姓名-職位鍵值對放入roles中,遍歷輸出便可,注意for循環中的i表示key即姓名,這樣roles[i]天然就表示該名字對應的職位了! 不得不感嘆awk真的是太強大了!簡直就是一門編程語言啊

相關文章
相關標籤/搜索