Ⅰ shell中,awk命令的$0是什麼意思
awk默認是以行為單位處理文本的,對1.txt中的每一行都執行後面
"{
}"
中的語句。
awk中的兩個術語:
記錄(默認就是文本的每一行)
欄位
(默認就是每個記錄中由空格或TAB分隔的字元串)
$0就表示一個記錄,$1表示記錄中的第一個欄位。
一般
print
$0
就是列印整行內容($0前面不需要
反斜杠
),print
$1表示只列印每行第一個欄位。
Ⅱ shell基礎應用(五)
一,正則表達式
w匹配數字、字母、下劃線
egrep "roow" user //找roo後面是數字、字母、下劃線的字元串
s 匹配空格、tab鍵
egrep "roos" user //找roo後面是1個空格或者tab鍵打出來的空格的字元串,如果沒有
就不輸出
二,sed其他指令
a行下追加 i行上添加 c替換整行
sed 'a 666' user //所有行的下面追加666
sed Ƈa 666' user //第1行的下面追加666
sed '/^bin/a 666' user //在以bin開頭的行的下面追加666
sed 'i 666' user //所有行的上面添加666
sed Ƌi 666' user //第5行的上面添加666
sed '$i 666' user //最後1行的上面添加666
sed 'c 666' user //所有行都替換成666
sed Ƈc 666' user //替換第1行為666
---------------------------------------------------------
三,awk
可以實現精確搜索並輸出 ,逐行處理
1,前置指令 | awk 選項 條件 指令
2,awk 選項 條件 指令 被處理文檔
選項 -F 定義分隔符
指令 print
條件 /字元串/
內置變數 $1第一列 $2第二列 $3第三列 ...
$0 所有列 NR行號 NF 列號
[root@proxy opt]# cat abc.txt //准備素材
hello the world
welcome to beijing
awk '{print}' abc.txt //輸出所有
awk '/to/{print}' abc.txt //輸出有to的那行
awk '{print $2}' abc.txt //輸出所有行的第2列
awk '/to/{print $1}' abc.txt //輸出有to的那行的第1列
awk '{print $0}' abc.txt //輸出所有行所有列
awk '{print $0,$1}' abc.txt //輸出所有行所有列和第1列
awk '{print NR}' abc.txt //輸出所有行的行號
awk '{print NR,$0}' abc.txt //輸出所有行的行號,所有列
awk '{print NR,NF}' abc.txt //輸出所有行的行號,列號(有幾列)
awk '/^bin/{print NR}' user //找以bin開頭的行,顯示該行的行號
awk '/^bin/{print NR,$0}' user //找以bin開頭的行,顯示該行的
行號,所有列
awk '{print NF}' user //輸出所有行的列號(每行有幾列)
awk -F: '{print $1}' user //文檔中如果沒有空格,可以用F修改分
隔符
awk -F: '{print $1,$6}' user //使用冒號作為列的分隔符,顯示
第1、6列
awk -F: '{print $1" 的家目錄是 "$6}' user //還可以輸出常量,加
雙引號即可
awk -F: '{print $1" 的解釋器是 "$7}' user
收集根分區剩餘容量
df -h | awk '//$/{print $4}' //使用df -h 作為前置指令交給awk處理
找到以/結尾的行,並輸出第4列
df -h | awk '//$/{print "根分區剩餘容量是"$4}' //然後加常量輸出
收集網卡流量信息
ifconfig eth0 | awk '/RX p/{print "eth0網卡接收的數量量是"$5}'
ifconfig eth0 | awk '/TX p/{print "eth0網卡發送的數量量是"$5}'
------------------------------------------------------------
四,awk的條件
1,/字元串/ 還可以使用正則 ~ 包含 !~不包含
awk -F: '$6~/root/{print}' user //輸出第6列包含root的行
awk -F: '$6~/bin/{print}' user //輸出第6列包含bin的行
awk -F: '$6!~/bin/{print}' user //輸出第6列不包含bin的行
2,使用數字或者字元串
== != > >= < <=
awk -F: '$3<3{print}' user //輸出第3列小於3的行
awk -F: '$3<=3{print}' user //輸出第3列小於等於3的行
awk -F: 'NR==2{print}' user //輸出第2行
awk -F: 'NR>2{print}' user //輸出行號大於2的行
3,邏輯組合 &&並且 ||或者
awk -F: 'NR==2||NR==4{print}' user //找行號是2或者4的行
awk -F: 'NR==2||NR==40{print}' user //如果只有一個條件滿足就顯示一個
awk -F: '$7~/bash/&&$3<=500{print}' user //找第7列包含bash並且第3列
小於等於500的行
awk 'NR==2&&NR==4{print}' user //找行號既是2又是4的行,不存在,無輸出
awk -F: '$7~/bash/&&NR<=3{print}' user //找第7列包含bash並且行號是1~3的
awk -F: '$7~/bash/||NR<=3{print}' user //找第7列包含bash或者行號是1~3的
awk -F: '$1~/root/' user //找第1列包含root的行
如果有用戶叫root6,也會搜到,比較寬松的搜索方式,如果
任務就是{print}的話可以省略不寫
awk -F: '$1=="root"' user //找第1列完全等於root的行
多一個字元少一個字元都不行,比較嚴格的搜索方式
4,運算
awk 'NR%2==0{print NR,$0}' user //在條件中使用運算
,找到將行號除以2餘數等於0的行,然後輸出該行的
行號和所有列,相當於輸出偶數行
-----------------------------------------------------
五,awk處理時機,可以執行額外任務
BEGIN任務 執行1次,讀取文檔之前執行
逐行任務 執行n次,讀取文檔時執行
END任務 執行1次,讀取文檔之後執行
BEGIN{ 任務1 }{ 任務2 }END{ 任務3 }
awk -F: 'BEGIN{print "ok"}{print $1}END{print "ok"}' user
awk 'BEGIN{print NR}{print NR}END{print NR}' user
利用awk處理時機,輸出下列內容
awk 'BEGIN{print "User UID Home"}' //第1步輸出表頭信息
awk -F: '{print $1" "$3" "$6}' user //第2步輸出內容
awk 'END{print "總計"NR"行" }' user //第3步輸出結尾
awk -F: 'BEGIN{print "User UID Home"}{print $1" "$3" "$6}END{print "總計"NR"行"}' user //合在一起寫
---------------------------------------------------------------------------
使用awk統計網站訪問量
setenforce 0 //關閉selinux
systemctl stop firewalld //關閉防火牆
systemctl restart httpd //開啟網站服務
使用瀏覽器多訪問幾次網站,包括本機用curl
curl 192.168.4.7:82 //如果埠沒改過就不用敲
awk '{print $1}' /var/log/httpd/access_log //初步統計,不完美
六,使用awk數組+for循環實現高級搜索
數組 相當於可以存儲多個值的特殊變數
數組名[下標]=下標對應的值
awk 'BEGIN{a[1]=10;a[2]=20;print a[2],a[1]}' //使用awk測試數組,首先
創建數組a,下標1對應值是10,下標2對應值是20,然後輸出下標是2與
下標是1的值
awk 'BEGIN{a["abc"]="abcabc";a["xyz"]="xyzxyz";print a["xyz"]}' //數組的下標
和值都可以不是數字,測試時加雙引號即可
以上信息是手工輸入,實際情況中通常是從文檔收集
准備一個文檔,裡面有6行,每行分別是abc、xyz、abc、opq、xyz、abc 然後
按照awk逐行處理的工作特點使用awk '{a[$1]++}' shu.txt 走完每一行得到下列結果
但不會輸出到屏幕
a[$1]++ a[abc]++ a[abc]=1
a[$1]++ a[xyz]++ a[xyz]=1
a[$1]++ a[abc]++ a[abc]=2
a[$1]++ a[opq]++ a[opq]=1
a[$1]++ a[xyz]++ a[xyz]=2
a[$1]++ a[abc]++ a[abc]=3
如果要輸出到屏幕可以使用命令awk '{a[$1]++}END{print a[abc]}' shu.txt
----------------------
根據上述操作得知使用數組可以收集信息,但收集完了之後查看確不方便,可以用for循環實現。方法如下:
for(變數名 in 數組名){print 變數名} //這個格式可以查看數組的所有下標
awk '{a[$1]++}END{for(i in a){print i,a[i]}}' shu.txt //使用逐行任務與數組
收集文檔shu.txt中的信息,然後在END任務中使用for循環顯示所有
數組a的下標與值
awk '{ip[$1]++}END{for(i in ip){print i,ip[i]}}' /var/log/httpd/ac
cess_log //將上述的文件替換成網站的日誌,就可以
最終用來查看日誌得到可以得到哪個ip來訪以及來訪的次數
awk '{ip[$1]++}END{for(i in ip){print i,ip[i]}}' /var/log/httpd/ac
cess_log | sort -nr -k 2 //使用sort命令增加排序
功能,-n是以數字形式排序,-r是降序, -k是指定為
第幾列排序
----------------------------------------------------------------------------
/var/log/secure是安全日誌,如果有人登陸時輸入錯誤密碼的話
信息會記錄下來,這種信息可以用awk抓取出來,方法如下:
awk '/Failed password for root/{ip[$11]++}END{for(i in ip){print i,ip[i]}}'
/var/log/secure //統計安全日誌中訪問root賬戶密碼輸入錯誤
的ip地址與次數
-----------------------------------------------------------------------------
編寫腳本,可以查看系統的各種參數信息
#!/bin/bash
while :
do
clear
free -h | awk '/^Mem:/{print "剩餘內存容量是"$4}'
df -h | awk '//$/{print "根分區剩餘容量是"$4}'
awk 'END{print "用戶總數是"NR"個"}' /etc/passwd
who | awk 'END{print "登錄用戶數量是"NR"個"}'
uptime | awk '{print "cpu的15分鍾平均負載是"$NF}'
rpm -qa | awk 'END{print "安裝的軟體包數量是"NR"個"}'
sleep 3
done
Ⅲ shell中,awk命令的$0是什麼意思
shell命令awk '{print $0}' 1.txt 的意思是輸出1.txt文件的所有內容。
shell命令awk '{print $1}' 1.txt的意思是輸出1.txt文件的第一列內容。
Shell是系統的用戶界面,提供了用戶與內核進行交互操作的一種介面。它接收用戶輸入的命令並把它送入內核去執行。
實際上Shell是一個命令解釋器,它解釋由用戶輸入的命令並且把它們送到內核。不僅如此,Shell有自己的編程語言用於對命令的編輯,它允許用戶編寫由shell命令組成的程序。Shell編程語言具有普通編程語言的很多特點,比如它也有循環結構和分支控制結構等,用這種編程語言編寫的Shell程序與其他應用程序具有同樣的效果。
(3)shellawk命令擴展閱讀:
shell的種類:
Linux中的shell有多種類型,其中最常用的幾種是Bourne shell(sh)、C shell(csh)和Korn shell(ksh)。
1、Bourne shell是UNⅨ最初使用的shell,並且在每種UNⅨ上都可以使用。Bourne shell在shell編程方面相當優秀,但在處理與用戶的交互方面做得不如其他幾種shell。
Linux操作系統預設的shell是Bourne Again shell,它是Bourne shell的擴展,簡稱Bash,與Bourne shell完全向後兼容,並且在Bourne shell的基礎上增加、增強了很多特性。
Bash放在/bin/bash中,它有許多特色,可以提供如命令補全、命令編輯和命令歷史表等功能,它還包含了很多C shell和Korn shell中的優點,有靈活和強大的編程介面,同時又有很友好的用戶界面。
2、C shell是一種比Bourne shell更適於編程的shell,它的語法與C語言很相似。Linux為喜歡使用C shell的人提供了Tcsh。Tcsh是C shell的一個擴展版本。Tcsh包括命令行編輯、可編程單詞補全、拼寫校正、歷史命令替換、作業控制和類似C語言的語法,它不僅和Bash shell是提示符兼容,而且還提供比Bash shell更多的提示符參數。
3、Korn shell集合了C shell和Bourne shell的優點並且和Bourne shell完全兼容。Linux系統提供了pdksh(ksh的擴展),它支持任務控制,可以在命令行上掛起、後台執行、喚醒或終止程序。
參考資料來源:網路-Linux Shell
Ⅳ awk命令詳解是什麼
awk命令是linux下的一個文件管理命令,具體語法格式為awk [參數] [文件],通常是用於文本和數據進行處理的編程語言,awk命令主要有兩個功能;awk命令可以在linux/unix下對文本和數據進行處理;awk命令支持用戶自定義函數和動態正則表達式。
相關介紹:
AWK是一種優良的文本處理工具。它不僅是Linux中也是任何環境中現有的功能最強大的數據處理引擎之一。這種編程及數據操作語言(其名稱得自於它的創始人AlfredAho、PeterWeinberger和BrianKernighan姓氏的首個字母)的最大功能取決於一個人所擁有的知識。
AWK提供了極其強大的功能:可以進行樣式裝入、流控制、數學運算符、進程式控制制語句甚至於內置的變數和函數。它具備了一個完整的語言所應具有的幾乎所有精美特性。
實際上AWK的確擁有自己的語言:AWK程序設計語言,三位創建者已將它正式定義為「樣式掃描和處理語言」。它允許您創建簡短的程序,這些程序讀取輸入文件、為數據排序、處理數據、對輸入執行計算以及生成報表,還有無數其他的功能。
最簡單地說,AWK是一種用於處理文本的編程語言工具。AWK在很多方面類似於shell編程語言,盡管AWK具有完全屬於其本身的語法。它的設計思想來源於SNOBOL4、sed、MarcRochkind設計的有效性語言、語言工具yacc和lex,當然還從C語言中獲取了一些優秀的思想。
在最初創造AWK時,其目的是用於文本處理,並且這種語言的基礎是,只要在輸入數據中有模式匹配,就執行一系列指令。
Ⅳ shell腳本中awk命令內置參數與腳本參數沖突,如何使用內置參數
題主你好,
先聲明一下,我的腳本不是太好,供參考.
首先IFS不是awk的內置變數, 而是shell內置變數.
另外awk內部的變數和awk外部語句的變數是兩套機制,也就是說假設有個變數a=1,你使用awk '{print a}' 並不會輸出1 //當然我的awk語句寫的不完整,只是為了表達意思.
你想要在awk中使用外部變數,要使用-v參數或是在最後追加參數的方式將想要使用的變數導到awk空間中, 才能使用,也就是說:
awk -v var="$a" '{print var}' 文件名 //此時你可以使用變數var間接輸出變數a的值.
或者寫為:
awk '{print var}' var="$a"文件名
====
寫在最後: 因為我的腳本不太好,所以調試信息也看不大明白,不過感覺應該不難,題主可以舉一個簡單具體一點的例子說明一下你想執行哪條語句,輸出什麼結果,我幫你看一下.
Ⅵ shell中最強大,實用的命令awk
awk是一個文本處理工具,通常用於處理數據並生成結果報告
語法格式
第一種形式
語法格式解釋
BEGIN正式處理數據之前
pattern匹配模式
{commands}匹配命令,可能多行
END處理完所有匹配數據後執行
第二種形式
內置變數含義
$0整行內容
n當前行的第1-n個欄位(按照指定分隔符分割後)
NF(Number Field)當前行的欄位個數,也就是多少列
NR(Number Row)當前行的行號,從1開始計數
FNR(File Number Row)多文件處理時,每個文件行號單獨計數,都是從0開始
FS(Field Separator)輸入欄位分割符。不指定默認以空格或者Tab鍵分割
RS(Row Separator)輸入行分割符。默認回車\n
OFS(Output Field Sepatator)輸出欄位分割符。默認為空格
ORS(Output Row)輸出行分隔符。默認為回車
FILENAME當前輸入的文件名字
ARGC命令行參數個數
ARGV命令行參數數組
需要指定分隔符:
不需要指定分割符,默認空格,tab鍵,多個也可以分隔(如一個空格+一個tab鍵)
show.txt文件內容如下
輸出如下:
輸出如下
可以用這個輸出每一行的最後一列的值
輸出如下(沒有混合使用,例子比較簡單)
show.txt的文件內容如下
先輸出每一行數據
輸入如下
輸出每一行的第二列
輸出如下
在上面基礎上指定行分隔符
輸出如下
再次指定列分隔符
輸出如下
show.txt的文件內容如下
輸入如下,因為是對行進行處理,所以有幾行,輸出幾次文件名
jps -l輸入如下,運行的服務如下
想關閉mbase-spider-1.0.jar這個jar包的服務,可以寫一個如下腳本,非常方便,更高階用法另開一篇文章好好寫寫
Ⅶ awk 命令
AWK
command 讀前處理 行處理 讀後處理
1、讀前處理: BEGIN{awk_cmd1;awk_cmd2}
2、行處理:定址命令
定址方法:正則、變數、比較和關系運算
正則需要用//包圍起來
awk -F: '/root/{print}' gad
awk -F: '$1~/root/{print}' gad 第一列匹配
awk -F: '$1~/<root>/{print}' gad 第一列匹配,鎖定字元串匹配
awk -F: '$1!~/root/{print}' gad
. 除了換行符以外的任意單個字元
[] 字元組內的任一字元
[^]對字元組內的每個字元取反(不匹配字元組內的每個字元)
[ ] 非字元組內的字元開頭的行
3、讀後處理END{awk_cmd1;awk_cmd2}
awk -F "" '{for(i=1;i<=NF;i++) print $i}' gad.txt 逐字換行
NF代表每行的元素個數
NR 表示AWK讀入的行數 (一共處理多少行,無論多少個文件)
FNR表示讀入行所在文件中的行數 (每個文件中有多少個文件)
1 1 AAAA
2 2 aaaa
3 3 a
4 1 bb
5 2 bbbbbbbb
賦值 = ++ -- += 。。。
awk 'BEGIN{a=1;print a++;print a}' 先執行命令然後a+1
|| 邏輯或 && 邏輯與 ! 取反
匹配正則或不匹配,正則需要用/正則/ 包圍住
~ !~
關系比較字元串時要把字元串用雙引號引起來
< <= > >= != ==
轉義序列
自身 $ 轉義$ 製表符 退格符
回車符
換行符 c 取消換行
-v可以借用此方式從shell變數中引入
a=root
awk -v var=$a -F':' '$1==var{print $1}' passwd
a= whoami ; awk -v var=$a -F':' '$1==var{print $3,$6}' /etc/passwd
FS 定義欄位分隔符,默認為一個空格
OFS 輸出的欄位分隔符,默認為一個空格
root-0-root
bin-1-bin
root@@0##root
bin@@1##bin
RS 記錄分隔符,默認為一個換行符
head -2 /etc/passwd | awk 'BEGIN{ RS=":"}{print}' 把:號換成了換行符
ORS 輸出的記錄分隔符,默認為一個換行符
head -2 /etc/passwd | awk 'BEGIN{ ORS="-"}{print}' 把換行符換成了 - 號
FILENAME 文件名
ARGC 命令行參數個數
ARGV 命令行參數排列
ENVIRON 輸出系統環境變數
root
Ⅷ awk 在shell命令中怎麼用
1.awk
'{print$4}'
spinout
此命令是用來提取文本的第四列
要注意格式
awk與單引號要有空格
後面一個單引號與文件名也有空格
2.如果要提取文本第四行的話
awk
'NR==4{print}'
spinout
也可用sed來提取第四行
比較簡單
sed
-n
4p
spinou
Ⅸ shell查出文件行號減1
可以使用以下命令來實現在Shell中查出文件行號減枯滑顫1的操作:
```
awk 'NR==LINE-1 {print $0; exit}' FILE_NAME
```
將上述命令中的LINE替換為需要查找的行號即可。該命令使用awk命令,NR表示當前行號,$0表示當前行內容,print $0表示輸出當前行內容。通過對NR進行判斷,找到需要查找的行並輸出內容。使用exit命令退出循環。由於你需要輸出的是查找到的行的上一行內容,因此需要將查找到的行號減一。FILE_NAME表示需要查找的文件名。
例如,如果需要查找文件test.txt中第5行沒敗的上一行內容,可以使用以下命令:
```
awk 'NR==4 {print $0; exit}' test.txt
```
上面的命令會輸出test.txt中第4行的內容,即第5行的上一行。讓漏
Ⅹ awk命令詳解是什麼
awk命令詳解:派擾侍awk是一個強大的文本分析工具,相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理。
awk有3個不同版本:awk、nawk和gawk,未作特別說明,一般指gawk,gawk是AWK的GNU版本。
使用方法:
盡管操作可能會很復雜,但語法總是這樣,其中pattern表示AWK在數據中查找的內容,而action是在找到匹配內容時所執行的一系列命令。花括弧({})不需要在程序中始終出現,但它們用於根據特定的模式對一系列指令進行分組。pattern就是要表示的正則表達式,用斜杠括起來。
awk語言的最基本功能是在文件或者字元串中基於指定規則瀏覽和抽取信息,awk抽取信息後,才能進行其他文本操作。完整的awk腳本通常用來格式化文本文件中的信息。
通常,awk是以文件的一塵吵行為處理單位的。awk每接收文件的一行,然後執行相應的命令,來處理文本。
以上內容參考:李絕網路-Shell編程