linux awk sed grep awk 求和平均最大最小
http://www.cnblogs.com/moveofgod/p/3540575.html
linux awk命令詳解
=======================================================
awk實現求和、平均、最大值和最小值的計算操作
1、求和
cat data|awk '{sum+=$1} END {print "Sum = ", sum}'
2、求平均
cat data|awk '{sum+=$1} END {print "Average = ", sum/NR}'
3、求最大值
cat data|awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}'
4、求最小值(min的初始值設定一個超大數即可)
awk 'BEGIN {min = 1999999} {if ($1<min) min=$1 fi} END {print "Min=", min}'
5、求訪問次數的Top 10 Resource,可以根據此進行最佳化
cat output/logs/cookie_logs/`date +%u`/cookie_log|grep -v '172.16'|grep -v '127.0.0.1' |awk -F' ' '{ if(index($1,"219.141.246")!=0) print $2; else print $1 } '|sort|uniq -c|sort -n |tail -n 10
=========================================================================
http://www.cnblogs.com/moveofgod/p/3540575.html
grep, sed 與 awk 相當有用 !
gerp 查詢, sed 編輯, awk 根據內容分析並處理.
awk(關鍵字:分析&處理) 一行一行的分析處理 awk '條件型別1{動作1}條件型別2{動作2}' filename, awk 也可以讀取來自前一個指令的 standard input
相對於sed常常用於一整行處理, awk則比較傾向於一行當中分成數個"欄位"(區域)來處理, 預設的分隔符是空格鍵或tab鍵
例如:
last -n 5 | awk '{print $1 "\t" $3}' 這裡大括號內$1"\t"$3 之間不加空格也可以, 不過最好還是加上個空格, 另外注意"\t"是有雙引號的, 因為本身這些內容都在單引號內
$0 代表整行 $1代表第一個區域, 依此類推
awk的處理流程是:
1. 讀第一行, 將第一行資料填入變數 $0, $1... 等變數中
2. 依據條件限制, 執行動作
3. 接下來執行下一行
所以, AWK一次處理是一行, 而一次中處理的最小單位是一個區域
另外還有3個變數, NF: 每一行處理的欄位數, NR 目前處理到第幾行 FS 目前的分隔符
邏輯判斷 > < >= <= == !== , 賦值直接使用=
cat /etc/passwd | awk '{FS=":"} $3<10 {print $1 "\t" $3}'
首先定義分隔符為:, 然後判斷, 注意看, 判斷沒有寫在{}中, 然後執行動作, FS=":"這是一個動作, 賦值動作, 不是一個判斷,
所以不寫在{}中
BEGIN END , 給程式設計師一個初始化和收尾的工作, BEGIN之後列出的操作在{}內將在awk開始掃描輸入之前執行, 而END{}內的操作, 將在掃描完輸入檔案後執行.
awk '/test/ {print NR}' abc 將帶有test的行的行號列印出來, 注意//之間可以使用正規表示式
awk {}內, 可以使用 if else ,for(i=0;i<10;i++), i=1 while(i<nf)
可見, awk的很多用法都等同於C語言, 比如"\t" 分隔符, print的格式, if, while, for 等等</nf)
awk 是相當複雜的工具, 真正使用時, 再補充吧. (有關工具的picture)
sed(關鍵字: 編輯) 以行為單位的文字編輯工具 sed可以直接修改檔案, 不過一般不推薦這麼做, 可以分析 standard input
基本工作方式: sed [-nef] '[動作]' [輸入文字]
-n : 安靜模式, 一般sed用法中, 來自stdin的資料一般會被列出到螢幕上, 如果使用-n引數後, 只有經過sed處理的那一行被列出來.
-e : 多重編輯, 比如你同時又想刪除某行, 又想改變其他行, 那麼可以用 sed -e '1,5d' -e 's/abc/xxx/g' filename
-f : 首先將 sed的動作寫在一個檔案內, 然後透過 sed -f scriptfile 就可以直接執行 scriptfile 內的sed動作 (沒有實驗成功, 不推薦使用)
-i : 直接編輯, 這回就是真的改變檔案中的內容了, 別的都只是改變顯示. (不推薦使用)
動作:
a 新增, a 後面可以接字串, 而這個字串會在新的一行出現. (下一行)
c 取代, c 後面的字串, 這些字串可以取代 n1,n2之間的行
d 刪除, 後面不接任何東西
i 插入, 後面的字串, 會在上一行出現
p 列印, 將選擇的資料列出, 通常和 sed -n 一起運作 sed -n '3p' 只列印第3行
s 取代, 類似vi中的取代, 1,20s/old/new/g
[line-address]q 退出, 匹配到某行退出, 提高效率
[line-address]r 匹配到的行讀取某檔案 例如: sed '1r qqq' abc , 注意, 寫入的文字是寫在了第1行的後邊, 也就是第2行
[line-address]w file, 匹配到的行寫入某檔案 例如: sed -n '/m/w qqq' abc , 從abc中讀取帶m的行寫到qqq檔案中, 注意, 這個寫入帶有覆蓋性.
舉例:
sed '1d' abc 刪除 abc 檔案裡的第一行, 注意, 這時會顯示除了第一行之外的所有行, 因為第一行已經被刪除了(實際檔案並沒有被刪除,而只是顯示的時候被刪除了)
sed -n '1d' abc 什麼內容也不顯示, 因為經過sed處理的行, 是個刪除操作, 所以不現實.
sed '2,$d' abc 刪除abc中從第二行到最後一行所有的內容, 注意, $符號正規表示式中表示行末尾, 但是這裡並沒有說那行末尾, 就會指最後一行末尾, ^開頭, 如果沒有指定哪行開頭, 那麼就是第一行開頭
sed '$d' abc 只刪除了最後一行, 因為並沒有指定是那行末尾, 就認為是最後一行末尾
sed '/test/d' abc 檔案中所有帶 test 的行, 全部刪除
sed '/test/a RRRRRRR' abc 將 RRRRRRR 追加到所有的帶 test 行的下一行 也有可能透過行 sed '1,5c RRRRRRR' abc
sed '/test/c RRRRRRR' abc 將 RRRRRRR 替換所有帶 test 的行, 當然, 這裡也可以是透過行來進行替換, 比如 sed '1,5c RRRRRRR' abc
grep(關鍵字: 擷取) 文字蒐集工具, 結合正規表示式非常強大
主要引數 []
-c : 只輸出匹配的行
-I : 不區分大小寫
-h : 查詢多檔案時不顯示檔名
-l : 查詢多檔案時, 只輸出包含匹配字元的檔名
-n : 顯示匹配的行號及行
-v : 顯示不包含匹配文字的所有行(我經常用除去grep本身)
基本工作方式: grep 要匹配的內容 檔名, 例如:
grep 'test' d* 顯示所有以d開頭的檔案中包含test的行
grep 'test' aa bb cc 顯示在 aa bb cc 檔案中包含test的行
grep '[a-z]\{5}\' aa 顯示所有包含字串至少有5個連續小寫字母的串
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-2123083/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- shell 中 grep、sed、awk 命令
- Linux三劍客grep、awk和sedLinux
- Linux 文字處理工具(grep sed awk )Linux
- 指令碼三兄弟 grep、awk、sed指令碼
- 【shell筆記>命令】grep,sed,awk筆記
- Shell字元操作命令——grep、sed、awk字元
- linux三劍客(grep、sed、awk)基本使用Linux
- grep、sed、awk、head、tail、gsub、subAI
- Linux命令之grep/sed/awk等行轉列Linux
- Linux三劍客Awk、Sed、Grep 命令詳解Linux
- Linux 三劍客 Awk、Sed、Grep 命令詳解Linux
- 寶付揭秘Linux支付命令操作之grep、sed、awkLinux
- 【Shell】sed xargs grep awk的組合用法
- [linux]sed與awkLinux
- 效能工具之linux三劍客awk、grep、sed詳解Linux
- 【Linux進階】使用grep、find、sed以及awk進行文字操作Linux
- Linux:管道命令與文字處理三劍客(grep、sed、awk)Linux
- shell指令碼專題-----cat,find,grep,awk,sed(五)指令碼
- 【Shell】【經驗】awk sed grep find sort常用配搭用法
- Linux系統中的管道命令、grep命令、sed命令和awk命令Linux
- 《sed & awk》讀書筆記之 awk 篇筆記
- Sed&awk筆記之awk篇:快速瞭解Awk(一)筆記
- Linux中awk命令正確的求最大值、最小值、平均值、總和Linux
- awk sed 用法詳解
- 幾個常用的文字處理shell 命令:find、grep、sort、uniq、sed、awk
- 如何利用多核CPU來加速你的Linux命令 — awk, sed, bzip2, grep, wc等Linux
- Linux awkLinux
- Linux shell工具grep awk cut sort uniq sort 使用小結Linux
- 學習sed & awk時做的筆記筆記
- 在Linux中,如何使用awk和sed進行文字處理?Linux
- Linux-(awk)Linux
- linux之 awkLinux
- linux之awkLinux
- sed+awk模擬簡單sql查詢SQL
- Awk和Sed格式化Hive的資料Hive
- linux的awk命令Linux
- linux awk 運算子Linux
- linux之awk用法Linux