awk 內置變量

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":將更改後的數據重定向到源文件當中。文件名必需要用雙引號引發來

相關文章
相關標籤/搜索