基本shell編程【3】- 經常使用的工具awk\sed\sort\uniq\od

awk

awk是個很好用的東西,大量使用在linux系統分析的結果展現處理上。而且可使用管道, input | awk ''  | output
1.首先要知道形式
awk 'command' file 如 awk '{print $0}' a.txt b.txt   (後面能夠跟一個或多個文件)
 
2.command學習。command是awk的精髓,其結構爲 '條件 {動做} 條件2 {動做2} ……'
 
2.1關鍵字學習:
變量名 含義 
ARGC 命令行變元個數 
ARGV 命令行變元數組 
FILENAME 當前輸入文件名 
FNR 當前文件中的記錄號 
FS 輸入域分隔符,默認爲一個空格 
RS 輸入記錄分隔符 
NF 當前記錄裏域個數 
NR 到目前爲止記錄數 
OFS 輸出域分隔符 
ORS 輸出記錄分隔符
 
2.2 條件動做
條件包括:
     BEGIN END 特殊的兩個,表明初始化和掃尾
     判斷:如$1 == "abc"  $NR == 5  /^tcp/(表示正則匹配)
   也可不寫條件,則表示「全匹配」。從這個角度來說 條件本質上是一種篩選規則。
 
動做:
       {print NR,NF,$1,$NF,}
   {if(xxx) xxx; else xxx;}
   {for(key in array) xxx}
 
3.實例學習:
查看機器創建的各鏈接數
netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'
 
看每一個鏈接的佔用內存byte數---apache
ps aux|grep -v grep|awk '/httpd/ {sum+=$6;n++};END{print sum/n}'
 
根據逗號對abc文件的每一行進行split,而後按照第二列進行排序,結果輸出到abc-sort中
 
awk -F, '{print $1}' abc | sort -n -k 2 -t: -r > abc-sort

sort命令解釋:
-n 是按照數字排序
-k 是按照第二列排
-t: 是以:爲分隔符
-r 是倒敘
 
git查看本次須要提交中變動的內容
git diff master HEAD --stat | awk '{printf "%s\n",$1}' |grep domain | awk -F'/' '{printf "%s\n",$NF}' | sort
 
批量重命名
ls *須要替換* | awk '{org=$0;gsub("須要替換","替換爲");system("echo "org" "$0)}' 
 
 

sed

sed用法不少,可是根據上節之中,用來作內容替換最多。html

sed -i -e 's/^dubbo_provider_version=.*[^e]$/&-pre/' /home/wuji/webroot-xxx/WEB-INF/classes/biz.properties
該命令做用是把 biz.properties中的dubbo_provider_version=1.0.0 替換爲dubbo_provider_version=1.0.0-pre
 
替換的格式爲 sed -e ’s/abc/def’ file.txt  把abc替換爲def。其中第一部分的正則在第二部分能夠被&取到。注意取到的是從dubbo開頭的所有,而不是.*部分,這是正則表達式的知識。
 
而且s能夠擴展爲
 
舉例2:去掉全部html標籤
$ sed -e 's/<[^>]*>//g' myfile.html
 
g的做用:不加只替換第一個匹配,加了會替換全部匹配
sed -i 直接替換文件而不是在屏幕上輸出 
 
學習過vim的朋友們能夠輕易的聯想到vim的命令模式,也有:s/abc/def的寫法,因此linux下的知識不少均可以舉一反三。
 

uniq

uniq能夠去除重複行或者作group by的統計
文件file:
a
a
b
b
b
 
sort file | uniq :
a
b
 
 
sort file | uniq -c:
2 a
3 b
 
之因此和sort組合是要把全部的a弄到一塊兒,防止b後面有a的狀況。
uniq -d 只顯示重複的 ,-c只顯示不重複的,二者互斥。
uniq -dc 只顯示重複並統計 
 

sort  

 
功能說明:將文本文件內容加以排序。
語  法:sort [-bcdfimMnr][-o<輸出文件>][-t<分隔字符>][+<起始欄位>-<結束欄位>][--help][--verison][文件]
補充說明:sort可針對文本文件的內容,以行爲單位來排序。
 
實例:
以第一個關鍵列的第二個字母開始進行排序:
$ sort -k 1.2 file.txt
以關鍵列第一列的第二個字母進行排序,若是第二個字母相同則根據第三列以數值的標準進行降序排列。
$ sort -k 1.2,1.2 -k 3,3nr file.txt 
 
-k 排序字段,按照-t 分隔符來區分的,從0開始。
-n 以數字格式排序。默認string方式比較的話,20和9比較是後者大。
-r 反序
-d 排序時,處理英文字母、數字及空格字符外,忽略其餘的字符。
-b 忽略每行前面開始出的空格字符。
-u 去除重複行。( 能夠利用這個來去重
sort選項沒特別須要講的,須要注意的就是-k。-k選項的具體語法格式以下:
[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
這個語法格式能夠被其中的逗號(「,」)分爲兩大部分,Start部分和End部分。
若是不設定End部分,那麼就認爲End被設定爲行尾。Start部分也由三部分組成,其中的Modifier部分就是咱們以前說過的相似n和r的選項部分。
咱們重點說說Start部分的FStart和C.Start。
C.Start也是能夠省略的,省略的話就表示從本域的開頭部分開始。以前例子中的-k 2和-k 3就是省略了C.Start的例子嘍。
FStart.CStart,其中FStart就是表示使用的域,而CStart則表示在FStart域中從第幾個字符開始算「排序首字符」。
同理,在End部分中,你能夠設定FEnd.CEnd,若是你省略.CEnd,則表示結尾到「域尾」,即本域的最後一個字符。或者,若是你將CEnd設定爲0(零),也是表示結尾到「域尾」。 
 

od

od命令是分析文件內容的工具,不少時候不知道文件的內容編碼,此時用od命令看文件內部的字節構成是最直接的方式,使用方法:
od -Ax -tcx4 file 。
 
能夠用於分析字符編碼 是否utf-8 ,是否LE,BE
至於如何分辨,還須要瞭解每種編碼的規則,譬如utf-8通常以三個字節來顯示中文,而gbk則是兩個。
相關文章
相關標籤/搜索