awk和sed

awk

替換列(刪除)

1 若是11列是0,那麼替換爲空;若是12列是0,那麼替換爲空html

2 不要用>,要用>>tcp

awk 'BEGIN{FS=OFS=","}{if ($11==0) $11=""}{if ($12==0) $12=""}1' important_tg_list.csv >> important_tg_list1.csvpost

統計列數

awk -F"," '{print NF}' important_tg_list.csv |sort -n|uniqthis

經常使用

#默認以空格分割,那整個文件就只有一列,打印最後一列結果以下
[root@localhost ~]# cat /etc/passwd|awk '{print $1}'|tail -1
tcpdump:x:72:72::/:/sbin/nologin
#用冒號分割打印第一列用戶名
[root@localhost ~]# cat /etc/passwd|awk -F: '{print $1}'|tail -1
tcpdump
#從ifconfig結果中匹配出Ip地址,思路:先grep匹配所在行,再用awk列切割
#匹配行
[root@localhost ~]# ifconfig|grep "Bcast"
          inet addr:192.168.15.172  Bcast:192.168.15.255  Mask:255.255.255.0
#切割列同時將多餘字符替換爲空
[root@localhost ~]# ifconfig|grep "Bcast"|awk '{print $2}'|sed 's/addr://g'
192.168.15.172
#也能夠進行2次awk切割
[root@localhost ~]# ifconfig|grep "Bcast"|awk '{print $2}'|awk -F: '{print $2}'
192.168.15.172
[root@localhost ~]# ifconfig|grep "Bcast"|awk '{print $2}'|awk -F: '{print "ip:"$2"-"$1}'  
ip:192.168.15.172-addr
#打印文件的第1,3行用分號間隔條件
[root@localhost sh]# cat test.txt|awk 'NR==1;NR==3 {print $0}' 
www.jf.com aaa
www.jf.com ccc
#打印第3行之後內容
[root@localhost sh]# cat test.txt|awk 'NR>=3 {print $0}'       
www.jf.com ccc
www.jf.com ddd
www.jf.com eee
#打印符號條件最後一個域(默認空格分割的最後一列)
[root@localhost sh]# cat test.txt|awk '{print $NF}' 
aaa
bbb
ccc
#打印倒數第2個域
[root@localhost sh]# cat test.txt|awk '{print $(NF-1)}'
www.jf.com
www.jf.com
#查看tcp監聽端口的狀態
[root@localhost sh]# netstat -an|awk '/^tcp/ {print $NF}'
LISTEN
LISTEN             #監聽
ESTABLISHED #轉發
#掃描文件打印全部字符長度大於80的行的行號NR
[root@localhost sh]# cat test.txt|awk 'length($0)>80 {print NR}'

擴展

https://juejin.im/post/5d09ebd05188252ea55fe683spa

 SED

i參數表示修改,不加i參數只能在屏幕上輸出預覽修改都的效果並不會修改源文件,加i參數就沒有輸出直接改源文件
    a參數表示在查找對象下一行添加內容,不帶空格a後面直接跟添加內容
    i 單引號內i參數表示在上一行插入

#n/p參數搭配使用查找特定對象
[root@localhost ~]# df -h|sed -n '/sda1/p'
/dev/sda1       194M   30M  155M  17% /boot
#預覽添加內容如給腳本加個註釋語句,注意a後面直接跟內容
[root@localhost sh]# sed '/192.168.15.2/a#this is test' ip_list
192.168.15.1 /var/www/html1 /data/www/html1
192.168.15.2 /var/www/html2 /data/www/html2
#this is test
#上一行插入
[root@localhost sh]# sed '/192.168.15.2/i#this is test2' ip_list   
192.168.15.1 /var/www/html1 /data/www/html1
#this is test2
192.168.15.2 /var/www/html2 /data/www/html2
#結合命令打印1到3行,用逗號間隔
[root@localhost ~]# df -h|sed -n '1,3p'
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        77G  3.5G   70G   5% /
tmpfs           491M     0  491M   0% /dev/shm
#結合命令打印1和3行,用分號間隔
[root@localhost ~]# df -h|sed -n '1p;3p'
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           491M     0  491M   0% /dev/shm
#查找以/結尾的行打印出來
[root@localhost ~]# df -h|sed -n '/\/$/p'
/dev/sda2        77G  3.5G   70G   5% /
#多個替換能夠一塊兒書寫如將%及G替換爲空,替換字段用分號間隔
[root@localhost ~]# df -h|sed -n '/\/$/p'|sed 's/G//g;s/%//g'
/dev/sda2        77  3.5   70   5 /
[root@localhost ~]# df -h|sed -n '/\/$/p'|sed -e 's/G//g' -e's/%//g'
/dev/sda2        77  3.5   70   5 /
#在每行的末尾或者開頭追加字段,&表示追加,注意追加字段的空格處理
[root@localhost sh]# sed 's/^/&www.jf.com /g' test.txt 
www.jf.com aaa
www.jf.com bbb
www.jf.com ccc
[root@localhost sh]# sed 's/$/& www.jf.com/g' test.txt   
aaa www.jf.com
bbb www.jf.com
ccc www.jf.com
------------------------------------------------------------------------------------------

#預覽替換後所有文件
sed 's/This/aaa/' test.txt
#-n選項和p命令一塊兒使用表示只打印那些發生替換的行
sed  -n 's/This/aaa/p' test.txt
#直接編輯文件選項-i,會匹配test.txt文件中每一行的第一個This替換爲this
 sed -i 's/This/this/' test.txt
#全面替換標記g,使用後綴/g標記會替換每一行中的全部匹配
sed 's/this/This/g' test.txt
#當須要從第N處匹配開始替換時,能夠使用/Ng
echo sksksksksksk | sed 's/sk/SK/2g'
skSKSKSKSKSK
echo sksksksksksk | sed 's/sk/SK/4g'
skskskSKSKSK
#以上命令中字符 / 在sed中做爲定界符使用,也能夠使用任意的定界符
echo sksksksksksk | sed 's:sk:SK:4g'
echo sksksksksksk | sed 's|sk|SK|4g'
#定界符出如今樣式內部時,須要進行轉義
 echo '/usr/local/bin' | sed 's/\/usr\/local\/bin/\/USR\/LOCAL\/BIN/g'
/USR/LOCAL/BIN
#刪除空白行d
 sed '/^$/d' test.txt
#刪除文件指定第2行(編輯文件須要和參數i配合使用)
sed '2d' test.txt
#刪除文件的第2行到末尾全部行
sed '2,$d' test.txt
#刪除文件最後一行
sed '$d' test.txt
#刪除文件中全部以my開頭的行
sed '/^my/'d test.txt
#打印從第5行開始到第一個包含以this開始的行之間的全部行
 sed -n '5,/^this/p' test.txt
#-e選項容許在同一行裏執行多條命令,第一條命令刪除1至5行,第二條命令用MY替換my。命令的執行順序對結果有影響。若是兩個命令都是替換命令,那麼第一個命令將影響第二個命令的結果
sed -e '1,5d' -e 's/my/MY/' test.txt
#寫入命令w,在test.txt中全部包含my的行都被寫入test2.txt裏
sed -n '/my/w test2.txt' test.txt
相關文章
相關標籤/搜索