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真的是太強大了!簡直就是一門編程語言啊