日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux-awk及内置变量

發布時間:2025/3/21 linux 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux-awk及内置变量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

awk(分析&處理)
awk是一個數據處理工具,相比于sed常常作用于一整行的處理,awk則比較傾向于將一行分成數個”字段“來處理。

通常運行模式:

awk ' 條件類型1{動作1} 條件類型2{動作2}...‘ filenameawk ' BEGIN{ print "start" } pattern { commands } END{ print "end" } file


awk 內置變量使用

內置變量表

屬性說明
$0當前記錄(作為單個變量)
$1~$n當前記錄的第n個字段,字段間由FS分隔
FS輸入字段分隔符 默認是空格
NF當前記錄中的字段個數,就是有多少列
NR已經讀出的記錄數,就是行號,從1開始
RS輸入的記錄他隔符默 認為換行符
OFS輸出字段分隔符 默認也是空格
ORS輸出的記錄分隔符,默認為換行符
ARGC命令行參數個數
ARGV命令行參數數組
FILENAME當前輸入文件的名字
IGNORECASE如果為真,則進行忽略大小寫的匹配
ARGIND當前被處理文件的ARGV標志符
CONVFMT數字轉換格式 %.6g
ENVIRONUNIX環境變量
ERRNOUNIX系統錯誤消息
FIELDWIDTHS輸入字段寬度的空白分隔字符串
FNR當前記錄數
OFMT數字的輸出格式(默認值是%.6g)
RSTART被匹配函數匹配的字符串首
RLENGTH被匹配函數匹配的字符串長度
SUBSEP數組下標分隔符(默認值是\034)

栗子

以下操作的數據來源為/etc/passwd

root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin gopher:x:13:30:gopher:/var/gopher:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin ...........

root開頭的那一行

[root@entel2 ~]# awk '/^root/{print $0}' /etc/passwd root:x:0:0:root:/root:/bin/bash

/^root/ 為選擇表達式,
^root表示以root開頭

$0 代表整行 $1代表第一個區域,依此類推

設置字段分隔符號(FS使用方法)

[root@entel2 ~]# head -1 /etc/passwd root:x:0:0:root:/root:/bin/bash[root@entel2 ~]# awk 'BEGIN{FS=":"}/^root/{print $1,$NF}' /etc/passwd root /bin/bash[root@entel2 ~]# awk 'BEGIN{FS=":"}/^root/{print $2,$NF}' /etc/passwd x /bin/bash[root@entel2 ~]# awk 'BEGIN{FS=":"}/^root/{print $0,$NF}' /etc/passwd root:x:0:0:root:/root:/bin/bash /bin/bash[root@entel2 ~]# awk 'BEGIN{FS=":"}/^root/{print $6,$NF}' /etc/passwd /root /bin/bash

FS為字段分隔符,可以自己設置,默認是空格,因為passwd里面是”:”分隔,所以需要修改默認分隔符。

NF是字段總數,$0代表當前行記錄,$1-$n是當前行,各個字段對應值。

$NF 最后一列的值。


記錄條數(NR,FNR使用方法)

[root@entel2 ~]# awk 'BEGIN{FS=":"}{print NR,$1,$NF}' /etc/passwd 1 root /bin/bash 2 bin /sbin/nologin 3 daemon /sbin/nologin 4 adm /sbin/nologin 5 lp /sbin/nologin 6 sync /bin/sync 7 shutdown /sbin/shutdown 8 halt /sbin/halt 9 mail /sbin/nologin 10 uucp /sbin/nologin ........

設置輸出字段分隔符(OFS使用方法)

指定分隔符為^^ [root@entel2 ~]# awk 'BEGIN{FS=":";OFS="^^"}/^root/{print FNR,$1,$NF}' /etc/passwd 1^^root^^/bin/bash默認字段分隔符: [root@entel2 ~]# awk 'BEGIN{FS=":"}/^root/{print FNR,$1,$NF}' /etc/passwd 1 root /bin/bash

OFS設置默認字段分隔符


設置輸出行記錄分隔符(ORS使用方法)

cat /etc/passwd|head -n 5|awk 'BEGIN{FS=":";ORS="^^"}{print FNR,$1,$NF}' [root@entel2 ~]# cat /etc/passwd|head -n 5|awk 'BEGIN{FS=":";ORS="^^"}{print FNR,$1,$NF}' 1 root /bin/bash^^2 bin /sbin/nologin^^3 daemon /sbin/nologin^^4 adm /sbin/nologin^^5 lp /sbin/nologin^^

ORS默認是換行符,這里修改為:”^^”,所有行之間用”^^”分隔了。


輸入參數獲取(ARGC ,ARGV使用)

[root@entel2 ~]# awk 'BEGIN{FS=":";print "ARGC="ARGC;for(k in ARGV) {print k"="ARGV[k]; }}' /etc/passwd ARGC=2 0=awk 1=/etc/passwd[root@entel2 ~]# awk 'BEGIN{FS=":";print "NUM="ARGC;for(k in ARGV){print k"="ARGV[k];}}' /etc/passwd NUM=2 0=awk 1=/etc/passwd

ARGC得到所有輸入參數個數,ARGV獲得輸入參數內容,是一個數組。


獲得傳入的文件名(FILENAME使用)

[root@entel2 ~]# awk 'BEGIN{FS=":";print FILENAME}/^root/{print FILENAME}' /etc/passwd/etc/passwd

可見 第一行并沒有打印出 /etc/passwd

FILENAME,$0-$N,NF 不能使用在BEGIN中,BEGIN中不能獲得任何與文件記錄操作的變量。

獲得linux環境變量(ENVIRON使用)

[root@entel2 ~]# awk 'BEGIN{print ENVIRON["PATH"];}' /etc/passwd .:/oracle/oracle11/product/112/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

輸出數據格式設置:(OFMT使用)

[root@entel2 ~]# awk 'BEGIN{OFMT="%.3f";print 2/3,123.11111111;}' /etc/passwd 0.667 123.111默認的 [root@entel2 ~]# awk 'BEGIN{OFMT="%.6f";print 2/3,123.11111111;}' /etc/passwd 0.666667 123.111111

OFMT默認輸出格式是:%.6g 保留六位小數,這里修改OFMT會修改默認數據輸出格式。

按寬度指定分隔符(FIELDWIDTHS使用)

[root@entel2 ~]# echo 20160922231258 | awk 'BEGIN{FIELDWIDTHS="4 2 2 2 2 2"}{print $1"-"$2"-"$3,$4":"$5":"$6}' 2016-09-22 23:12:58

FIELDWIDTHS其格式為空格分隔的一串數字,用以對記錄進行域的分隔,FIELDWIDTHS=”4 2 2 2 2 2”就表示$1寬度是4,$2是2,$3是2 …. 。這個時候會忽略:FS分隔符。

RSTART RLENGTH使用

[root@entel2 ~]# awk 'BEGIN{start=match("this is a test",/[a-z]+$/); print start, RSTART, RLENGTH }' 11 11 4[root@entel2 ~]# awk 'BEGIN{start=match("this is a test",/^[a-z]+$/); print start, RSTART, RLENGTH }' 0 0 -1

RSTART 被匹配正則表達式首位置,RLENGTH 匹配字符長度,沒有找到為-1.


總結

以上是生活随笔為你收集整理的Linux-awk及内置变量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天色播 | 粗大的内捧猛烈进出在线视频 | 女同hd系列中文字幕 | 天堂国产一区二区三区 | 女生扒开尿口给男生捅 | 99久久人妻精品免费二区 | 青青草视频免费播放 | 日韩在线观看免费 | 久久曰视频 | 五月激情丁香婷婷 | 牛牛影视一区二区三区 | 午夜久久剧场 | 能直接看的av| 国产尤物精品 | 91视频国产精品 | 伊人av网站| 精品久久久久国产 | 38激情 | 极品白嫩丰满少妇无套 | 久久精品日韩无码 | 成人免费高清在线观看 | 久久99婷婷 | 日韩大片免费看 | 日韩三级麻豆 | 一区二区三区视频播放 | www.av在线视频 | 亚洲色图15p | 国产h视频在线观看 | 成人免费黄色大片 | 国产免费毛卡片 | 国产美女免费网站 | 果冻传媒18禁免费视频 | 日韩av电影网 | 国产原创一区 | 97色在线| 男人的天堂影院 | 午夜剧场免费在线观看 | 成人天堂噜噜噜 | 免费黄色入口 | 大地资源二中文在线影视免费观看 | 欧美99久久精品乱码影视 | 狠狠操狠狠操 | 韩国美女一区 | 四虎看黄| 男人的天堂色 | 婷婷久久网 | 国产精品国产三级国产专区51 | 亚洲国产精品系列 | 美日韩中文字幕 | 动漫美女被吸乳奶动漫视频 | 亚洲另类色综合网站 | 国产麻豆剧传媒精品国产 | 国产欧美久久久久久 | 日本久久久久久久久久 | 天堂av资源在线 | 91天天看 | 日韩精品在线一区二区三区 | 一起草国产 | 亚洲午夜精品一区二区三区他趣 | 肉嫁高柳家 高清 | 不卡一区二区在线视频 | 最近国语视频在线观看免费播放 | 人妻无码一区二区三区免费 | 不卡在线 | 四虎免费影视 | 丝袜人妻一区二区 | 国产美女免费无遮挡 | 国产二区视频在线观看 | 久久精品一区二区在线观看 | 麻豆免费在线视频 | 成a人v| 少妇脱了内裤让我添 | 日批免费观看 | 国产欧美不卡 | 亚洲人午夜射精精品日韩 | 亚洲码国产精品高潮在线 | 内射国产内射夫妻免费频道 | 色婷婷免费视频 | 国产私拍 | 日韩高清中文字幕 | 精品乱子伦 | 黄色视屏在线免费观看 | xxxx黄色| 欧美成人精品 | 亚洲爱爱网| 岛国精品一区二区三区 | 欧美jizzhd精品欧美18 | 国产欧美日韩专区发布 | 99riav3国产精品视频 | 自拍21区 | 久久精品伦理 | 综合国产精品 | 成人国产在线 | 国产一区欧美日韩 | www.日韩| 亚洲天堂资源网 | 特大黑人巨交吊性xxxxhd | 无码一区二区三区在线观看 | 亚洲第一页夜 |