awk

  1. 在文件某一行上添加一列mysql

#awk實現
awk -v a="add_chars" '{print $0} /REGE/{print $0,a}' file.txt
解釋:-v:引入一個變量a,/REGE/:使用正則匹配一行
#sed實現
sed '/REGE/{s/.&/& add_chars/g}' file.txt
解釋:/REGE/:匹配到正則REGE後進行替換動做


  2.不一樣的行不一樣處理nginx

shell> awk -v a="aaa" -v b="bbb" 'NR<=4{if($6 ~ /TIME|ESTABLISHED/) print NR,$0,a;else if($6 ~ /LISTEN/) print NR,$0,b;else print NR,a,b } NR>4{print NR,$0,a,b}' netstat.txt
1 aaa bbb
2 aaa bbb
3 tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      961/sshd             bbb
4 tcp        0      0 0.0.0.0:9080                0.0.0.0:*                   LISTEN      22296/nginx.conf     bbb
5 tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1182/master          aaa bbb
6 tcp        0      0 0.0.0.0:9180                0.0.0.0:*                   LISTEN      15297/httpd          aaa bbb
7 tcp        0      0 0.0.0.0:5666                0.0.0.0:*                   LISTEN      23316/xinetd         aaa bbb
8 tcp        0      0 127.0.0.1:199               0.0.0.0:*                   LISTEN      13571/snmpd          aaa bbb
9 tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      2131/mysqld          aaa bbb
10 tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      22296/nginx.conf     aaa bbb
11 tcp        0      0 127.0.0.1:1446              127.0.0.1:80                TIME_WAIT   -                    aaa bbb
12 tcp        0      0 127.0.0.1:3306              127.0.0.1:60675             TIME_WAIT   -                    aaa bbb
13 tcp        0      0 127.0.0.1:3306              127.0.0.1:60663             TIME_WAIT   -                    aaa bbb
14 tcp        0      0 127.0.0.1:3306              127.0.0.1:60668             TIME_WAIT   -                    aaa bbb

解釋:分兩種狀況:NR<=4{...}和 NR>4{...},分別進行不一樣的動做sql

{...}內的動做,若是須要多個命令輔助時,能夠使用分號;隔開shell


3.多個條件匹配bash

awk '/nologin/ && NR<20 {if(NR<=2) print $1;else if(NR>2 && NR<10) print $2;else print $0}' passwd
#區別:
awk '/nologin/ && NR<20; {if(NR<=2) print $1;else if(NR>2 && NR<10) print $2;else print $0}' passwd
#NR<20後面有分號,分號先後兩個部分會分別執行,即重複輸出

解釋:ssh

條件:/nologin/ && NR<+20  tcp

---條件中首先過濾出符合這兩個條件的行ide

動做:if(NR<=2) print $1;else if(NR>2 && NR<10) print $2;else print $0
ci

--在動做中對這些符合的行進一步處理it

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息