awk 內置變量centos
FS 設置輸入域分隔符,等價於命令行 -F選項bash
OFS 輸出域分隔符jsp
NF 瀏覽記錄的域的個數
NR 已讀的記錄數
RS 控制記錄分隔符spa
ORS 輸出記錄分隔符命令行
substr 截取指定的字符串server
gsub 替換指定字符串 字符串
實例:awk
1. FS設置域分隔符 等於-F。變量
過濾出了/etc/passwd 文件中的第一列ejs
[root@centos-1 ~]# awk 'BEGIN{FS=":"}{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
2.OFS 輸出域分隔符。
咱們能夠改變文件內容的分割符號,而且打印出來
文件內容以下
[root@centos-1 ~]# cat abc
123 456
abc bcd
aaa bbb
[root@centos-1 ~]# awk 'BEGIN{OFS=","}{print $1,$2}' abc
123,456
abc,bcd
aaa,bbb
注意:這種狀況須要多列,單列是不行的
3.NF 瀏覽記錄的域的個數
打印出每行有幾列
[root@centos-1 ~]# awk '{print NF}' abc
2
2
2
4.NR 已讀的記錄數
awk 讀了幾行內容
[root@centos-1 ~]# awk '{print NR}' abc
1
2
3
五、ORS 輸出記錄分隔符
awk規定,對於文本文件,默認狀況下,一條記錄對應一行,即記錄之間的默認分隔符是換行符;而一條記錄又能夠分爲多個字段,默認字段分隔符爲空格。
[root@centos-1 ~]# cat abc
123
abc
aaa
[root@centos-1 ~]# awk 'BEGIN{ORS=","}{print $0}' abc
123,abc,aaa,[root@centos-1 ~]#
因此咱們能夠在編輯某些文件時,能夠讓文件內容橫排顯示,而且加上必定的分割符號
6.substr($n,n) 打印指定的列,而且從指定的第n個字符開始打印
substr($n,n,m) 打印指定的列,而且從指定的第n個字符開始打印,到m個字符中止
[root@centos ~]# awk 'BEGIN{FS=":"}{if(NR==1){print substr($NF,1)}}' /etc/passwd
/bin/bash
[root@centos ~]# awk 'BEGIN{FS=":"}{if(NR==1){print substr($NF,2)}}' /etc/passwd
bin/bash
[root@centos ~]# awk 'BEGIN{FS=":"}{if(NR==1){print substr($NF,3)}}' /etc/passwd
in/bash
過濾IP
[root@server2 ~]# ifconfig |awk '{if(NR==2){print substr($2,6,12)}}'
192.168.3.12
將第一行的每一個字符後面加一個空格
[root@server2 ~]# awk 'BEGIN{ORS=" "}{if(NR==1){for(i=1;i<=length();i++){print substr($0,i,1)}print "\n"}}' /etc/passwd
r o o t : x : 0 : 0 : r o o t : / r o o t : / b i n / b a s h
7.將第二段的數字替換成行號
[root@centos6 ~]# cat abc
hshs a=1 jsjs
hds a=1 isi
hshppls a=1 jswyuwe
hyeyeushs a=1 jspppjs
h555shs a=1 jsjs888dh
hshggghs a=1 jshehhjs
hshhhhshes a=1jsjs7iii
hshshhsjs a=1 suuejejs
hshgewheues a=1 jejejsjs
hsujejeuhs a=1 77ieh2ssjs
[root@centos6 ~]# awk '{sub($2,"a="NR);print > "abc"}' abc
print > "abc":將更改後的數據重定向到源文件當中。文件名必需要用雙引號引發來