AWK文本工具
兩種版本1.nawk ??2.gawk
gawk ?? 模式掃描和處理語言
選項:
-F 指明輸入時用到的字段分隔符
-v ?var=value:自定義變量
基本格式: awk [options] ’program’???file….
program:pattern{action statrments;……..}
分隔符,域記錄:
1. awk 執行時,由分隔符分隔的字段標記$1,$2….$n 稱為域標識。
2. $0為所有域?;蛘哒f整行
3. 文件的每一行稱為記錄
print 格式:print item1,item2,………..
要點:
1.?逗號分隔
2.?輸出的各item可以是字符串,也可以是數值
3.?如省略item,相當于print $0
例子:
awk ‘{print “hello,awk”}’???????????在屏幕輸出hello,awk
awk -F: ‘{print}’ ?/etc/passwd ?????在屏幕上打印/etc/passwd文件的內容
awk -F: ‘{print “zm”}’ ?/etc/passwd ??有多少行就打印多少行zm
awk -F: ‘{print $1}’ ?/etc/passwd ?????打印/etc/passwd的以:為分隔符的第一個字段
awk -F: ‘{print $0}’ ?/etc/passwd ?????打印所有字段
awk -F: ‘{print $1”\t”?$3}’ ?/etc/passwd ???打印文件的第一個和第三個字段
awk 變量:內置和自定義變量
FS:輸入字段分隔符,默認為空白符
awk -v FS=”:” ‘{print $1,$F,$3}’ /etc/passwd 打印第一個字符和第三個字符用:分
awk -F: ‘{print $1,$3,$7}’ /etc/passw 打印1.3.7個字符
OFS:輸出字段分隔符,默認為空白字符
awk -v FS=”:” -v OFS=”:” ‘{print $1,$3,$7}’ /etc/passwd ??輸出以:分隔打印1.3.7
RS:輸出記錄分隔符,指定輸入時的換行符
awk -v RS=” ‘{print}’ /etc/passwd
ORS:輸出記錄分隔符,輸出時用指定符號代替換行符
?awk -v RS=” -v ORS=’###’ ‘{print}’ /etc/passwd
NF:字段數量
awk -F: ‘{print NF}’ /etc/fsta
awk -F: ‘{print $(NF-1)}’ /etc/passwd
NR:記錄號
awk ‘{print NR}’ /etc/fstab ; awk END'{print NR}’ /etc/fstab
FNR:各文件分別計數記錄號
awk ‘{print FNR}’ /etc/fstab ?/etc/passwd ???分別打印各個文件行數
FILENAME:當前文件名
awk “{print FILENAME}” /etc/fstab ??????打印出當前文件名
ARGC:命令行參數的個數
awk ‘{peint ARGC}’ /etc/fstab /etc/inittab ??打印命令行參數個數,不加GEGIN不打印
awk ‘BEGIN {print ARGC}’ ?/etc/fstab /etc/inittab ????打印命令行參數個數,awk也算
ARGV:數組,保存的是命令行所給定的各參數
awk ‘BEGIN{print ARGV[0]}’ /etc/fstab /etc/inittab 結果打印處awk
awk ‘BEGIN{print ARGV[1]}’ /etc/fstab /etc/inittab 打印出/etc/fstab
awk變量:自定義變量(區分字符大小寫)
-v ?var=value
在program中直接定義
示例:
awk -v test=’hello gawk’ ‘{print test}’ /etc/fstab ??先賦值后打印
awk -v test=’hello gawk’ ‘BEGIN{print test}’ /etc/fstab ??只打印一行
awk ‘BEGIN{test=”hello,gawk”;print test}’ ??
printf命令
格式化輸出:printf “FORMAT” ,item1,item2,…….
1.?必須指定FORMAT
2.?不會自動換行,需要顯示給出換行符,\n
3.?FORMAT中需要分別為后面每個item指定格式符
格式符:與item一一對應
%c:顯示字符的ASCII碼
%d,%i:顯示字符的十進制數
%e,%E:顯示科學計數法值
%f:顯示浮點數
%g:以科學計數法或浮點形式顯示值
%s:顯示字符串
%u:無符號整數
%%:顯示自身
修飾符
#[.#]:第一個數字控制顯示的寬度;第二個#表示小數點后的精確度,%3.1f
–:左對齊 ?%-15s
+:右對其 ?%+d
例子:
awk -F: ‘{printf “%s”,$1}’ /etc/passwd ?顯示$1的字符串
awk -F: ‘{printf “%s\n”,$1}’ /etc/passwd ???換行顯示$1
awk -F: ‘{printf “%-20s %10d\n”,$1,$3}’ /etc/passwd
awk -F: ‘{printf “Username:%s UID:%d\n”,$1,$3}’ /etc/passwd
awk -F: ‘{printf “Username:%-15s,UID:%d\n” ,$1,$3}’ /etc/passwd
awk -F: ‘$0 ~ /root/{print $1}’ /etc/passwd ?????如果包涵root就打印
awk -F: ‘$0 ~ ?“root”‘ /etc/passwd ???????????打印包含root的行
awk -F: ‘$0 !~ ?/root/’ /etc/passwd ???????????不打印包含root的行
awk -F: ‘$3==0’ /etc/passwd ??????打印第三個字段包含0
操作符:&&,|| ,!
實例:
?awk -F: ‘$3>=0 && $3<=1000 {print $1}’ /etc/passwd ??打印id大于3小于1000的用戶
?awk -F: ‘$3==0 || $3>=1000 {print $1}’ /etc/passwd ??打印id等于3與1000的用戶
awk -F: ‘!($3==0){print $1}’ /etc/passwd ???打印id不等于3的用戶
awk -F: ‘!($3>=500){print $3}’ /etc/passwd ??打印id大于3的id
df | awk ‘$1 ~ /^\/dev\/sd/{print $1,$5}’| awk -F% ‘{print $1}’ ??打印dev內存使用
seq 10 | awk ‘i=!i’ ?????????????????????????打印奇數行
awk控制語句
語法:
if(condition){statement,……}[else statement]
if(condition){statement1}else if(condition2){statement2}
awk -F: ‘{if($3>=100)print $1,$3}’ /etc/passwd ?????$3大于100就打印$1,$3
awk -F: ‘{if($3>=1000){printf “Common user:%s\n”,$1} else {printf “root or user:%s\n”,$1}}’ /etc/passwd
while循環
awk ‘/^[[:space:]]*linux16/{i=1;while(i<=NF){print $i,length($i);i++}}’ /etc/grub2.cfg
軟件包管理YUM,RPM
二進制應用程序組成部分
二進制文件,庫文件,配置文件,幫助文件
查看二進制程序所依賴的文件 ???ldd /PATH/TO/BINARY_FILE
管理及查看本機裝載的庫文件 ???ldconfig
??/sbin/ldconfig -p 顯示本機已經緩存的所有可用庫文件名
配置文件/etc/ld.so.conf.d/, ?/etc/ld.so.conf.d/*.conf
緩存文件/etc/ld.so.cache
rpm包安裝[insttall-options]
–test:測試安裝
–nodeps:忽略依賴關系
–replacepkgs
–nosignature 不檢查來源合法性
–nodigest不檢查包完整性
–noscripts 不執行程序包腳本
-u 安裝有舊程序包,則升級。不存在舊版,則安裝
-f ?安裝有舊程序包,則升級。不存在舊版,則不執行操作
–oldpackage:降級安裝
–force:強制安裝
換內核用-ivh
-e卸載 ?-a所有包 ?-f查看指定文件由那個程序包安裝生成
-q ??針對未安裝的程序包查詢操作
-c ??程序配置文檔 ??-d程序的文檔 -l生成的所有文件 -R依賴關系
Yum:
[****]
baseurl=file:// ?http:// ??ftp:// ?https://
gpgcheck=0 ?
enabled=1
?
?
?
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/92451