awklinux文件
『壹』 linux awk命令怎麼用
awk命令是Alfred Aho, Peter Weinberger, Brian Kernighan三位作者聯合開發的,用於Linux/Unix中處理數據和產生報告。awk命令功能十分強大,可根據需要抓取、截取指定的列或行。
首先在/mnt目錄下創建示例文本文件f1,其內容如下:
1 hello hello
2 data data
3 xyz abc
4 123 789
5 ftp
6 Apache
7 apache
然後,使用awk對f1文件內容進行處理,舉例如下。
①awk -F " " '{print $2,$3}' f1:截取顯示文檔的第二列和第三列,-F指定分隔符為空格,$表示顯示第幾列。其中print表示要做輸出信息的動作,$2和$3表示要輸出的列號,awk要求將print已經輸出列等內容放在「'{}'」之間。
②awk -F " " '($1>3){print $2,$3}' f1:選取第一列的值大於3的行,顯示其第二列和第三列,在「()」中指定篩選條件。
③awk 'NR==4 || NR==3' f1:顯示第三行和第四行,NR表示行號。
④awk '/data/ {print $2}' f1:抓取包含指定字元的行,再對列進行截取。此例中,awk先按照「data」字元串對文件f1中的行篩選,找出包含「data」的行以後,再按照默認的空格作為分隔符對行的內容做切割,僅列印出第二列的內容。
⑤awk '$2 ~ /data/ ' f1:抓取第二列包含指定字元的行。其中「~」表示是否匹配指定的「data」,如果第二列的內容包含「data」就列印出整行內容。
⑥awk '$2 !~ /data/ ' f1:抓取第二列不包含指定字元的行。其中「!~」表示是否不匹配指定的「data」,如果第二列的內容不包含「data」就列印出整行內容。
『貳』 linux里awk是做什麼的,請詳細說明
awk語言的最基本功能是在文件或字元串中基於指定規則來分解抽取信息,也可以基於指定的規則來輸出數據。完整的awk腳本通常用來格式化文本文件中的信息。
你比如:
echo "11|22|33" | awk -F "|" '{print $2}'
『叄』 Linux裡面awk -F作用是什麼
awk是一個強大的文本分析工具,簡單來說awk就是把文件逐行讀入,(空格,製表符)為默認分隔符將每行切片,切開的部分再進行各種分析處理
awk命令格式如下
awk [-F field-separator] 'commands' input-file(s)
[-F 分隔符]是可選的,因為awk使用空格,製表符作為預設的欄位分隔符,因此如果要瀏覽欄位間有空格,製表符的文本,不必指定這個選項,但如果要瀏覽諸如/etc/passwd文件,此文件各欄位以冒號作為分隔符,則必須指明-F選項。」Linux命令大全「可查詢下命令介紹
『肆』 Linux三劍客awk命令篇二:命令操作符
Linux三劍客awk命令篇二:命令操作符
關於awk的原理等基本知識請參考上篇:
Linux三劍客awk命令篇一:原理及基本命令
補充
1、語法格式:
(1) Awk完整語法
awk 'BEGIN{commands} pattern{commands}END{commands} ' file
BEGIN{commands}:處理數據前執行的命令。
END{commands}:處理完數據後執行的命令。
這兩個命令可以省略。見(2)
(2) Awk基本語法
awk -F '分割符' '/模式/{動作} ' file
這里的 '/模式/{動作} ' 類似於sed的命令格式。
模式:
(1) 正則表達式(注意格式: /正則表達式/ )
(2) 條件表達式(例如:> <等等)
總結:
這里的模式通俗來講是 用來找誰, 而動作表示是 幹啥。
2、 awk的命令操作符
(1) 正則表達式與bash一致
(2) + - * / % ++ --
(3) && || !
(4) > < >= <= != == ~ !~
~:表示匹配後面的模式,用於欄位,見 案例1 。
其餘的都比較常見就不舉例了。
3、案例
案例1:
~使用案例
awk -F : '$3 ~ /<...>/{print $1,$3}' /etc/passwd
解釋:
模式:<...>
< >表示定界符,只匹配3個字元。
$3 ~:表示$3這個欄位必須符合後面模式(<...>)的要求。
見如下輸出結果,$3都是3個字元。
案例2:
% || ==使用案例
seq 100 | awk '$1 % 7 == 0 || $1 ~ /^99/{print $1}'
輸出結果的要求:
整除7或者以99開頭
案例3:
++使用
awk 'BEGIN{num=0}{num++}END{print num}' /etc/passwd
簡單解釋:
BEGIN{num=0}:定義一個變數num
{num++}:這里沒有模式,只有動作。
即每匹配到文件/etc/passwd的一行就執行num++
END{print num}:文件遍歷結束,列印num的值,即文件的行數。
這里我們使用wc -l驗證也是沒問題的。
cat /etc/passwd | wc -l
上面3個案例簡單的使用了awk的命令操作符。
雖然只是用到了幾個簡單的,但是其他同理,大家可以執行操作。
下一篇:
Linux三劍客awk命令篇二之內部變數
歡迎大家給予寶貴的意見或者建議。
歡迎大家補充或者共享一些其他的方法。
感謝支持。
『伍』 Linux入門系列——awk命令詳解
awk是一個強大的文本分析工具,與grep、sed相比,awk在對數據分析並生成報告時,顯得有很大的優勢。
awk有三個不同的版本:awk、nawk和gawk,在沒有做特殊說時的時候默認的就是gawk,gawk是awk的GNU版本。
其中command是真正的awk命令,-F表示域的分隔符,是個可選項。Filename是等待處理的文件
將所有的awk命令寫入到一個文件,並使用該文件有X許可權,然後awk命令解釋器作為腳本的首行,也就是說可以把腳本最開始的 #!/bin/bash 換成 #!/bin/awk
最後直接執行這個腳本文件就行了。
-f 指定要載入的awk腳本,是一個文件。Filename是等待處理的文件
awk的工作流程是這樣的:讀入一行後(最後面帶有」 」的),就按-F指定的分隔符來將該行劃分成N個區域,$0表示所有的區域,$1表示第一個域,$2表示第二個域,依此類推,$n表示第n個域。
總結:awk先執行BEGIN內的命令,然後再讀入文件中的行,接著就是按照指定的分隔符將該行分成N個區域,然後再來執行模式所對應的動作action。然後,再來讀入第二行。。再重復執行action,直到所有的行都處理完成。最後再執行END中的命令。
注意:' // '之間是支持正則表達式的,如果此處只有pattern,而沒有action,那麼awk默認會把匹配到的行列印出來。
awk中的print還可以使用C語言中的printf來替代。在輸出格式比較復雜的時候使用printf函數會比print函數要更直觀一些,如下:
還可以使用-v key=value來自定義變數。如下:
awk中的條件語句是從C中借鑒過來的
語法:if (condition) {then-body} else {else-body}
例如使用awk來統計某個目錄下的普通文件的大小,不包括子目錄的,並過濾掉目錄。
循環語句也和C中的一樣,支持while、do/while、for、continue、break等關鍵字。
break和continue常用於循環中;
在awk中,數組的下標可以是數字或字母。一般awk中的數組的作用是從記錄中收集信息,用於計算總和、統計單詞等。
在awk中要刪除一個元素的時候使用 delete array[index]
更多請參見awk官方文檔[http://www.gnu.org/software/gawk/manual/gawk.html]
『陸』 linux awk命令詳解
awk命令是linux下的一個文件管理命令,通常是用於文本和數據進行處理的編程語言,awk命令主要有兩個功能,具體介紹如下:1、awk命令可以在linux/unix下對文本和數據進行處理;
2、awk命令支持用戶自定義函數和動態正則表達式。
參考範例:
比如列印每一行的第二和第三個欄位,具體命令為:
[root@linuxcool~]#awk'{print$2,$3}'file
awk命令的具體語法格式為awk[參數][文件]。
參數:
-F指定輸入時用到的欄位分隔符
-v自定義變數
-f從腳本中讀取awk命令
-m對val值設置內在限制
以上就是的分享了,希望能夠幫助到大家。
本文章基於ThinkpadE15品牌、centos7系統撰寫的。
『柒』 如何在Linux中使用awk命令
awk:用於一行中分成數個「欄位」來處理。適合處理
小型數據。
運行模式:awk
'條件類型1{動作1}
條件類型2{動作2}
...'
filename
#
last
|
awk
'{print
$1
"\t"
$3}'
<==
查看登錄者的數據,只顯示登錄名和ip地址,並以[tab]隔開
awk
的內置變數
變數名稱
代表的含義
NF
每一行($0)擁有的欄位總數
NR
當前
awk
所處理的是
「第幾行」
數據
FS
當前分隔符,默認空格鍵
awk
的邏輯運算符
運算單元
代表含義
>
大於
<
小於
>=
大於或等於
<=
小於或等於
==
等於
!=
不等於
範例:
cat
/etc/passwd
|
awk
'{FS=":"}
$3
<
10
{print
$1
"\t"
$3}'
<==
文件/etc/passwd是以":"分隔的,查看第三欄小於10的數據,並且只顯示帳號與第三欄
以上是我對awk的總結,希望對你有幫助,是我寫的哦,不是復制的。
『捌』 linux三劍客的基本使用——grep、sed、awk
grep、sed、awk是linux功能非常強大的三個命令,grep是查找過濾文本,sed是對文本進行編輯替換,awk是對文本進行分析報告。
最簡單的理解就是找什麼東西用grep,想修改什麼內容用sed,想格式化內容用awk。
創建一個文件名為grep_text.txt的文件,並放入內容:
SillyMadman is both a madman and a fool.
Everyone agrees with this sentence.
我要查找在grep_text.txt文件里有Silly的行
命令是: grep Silly grep_text.txt
會返回內容:SillyMadman is both a madman and a fool.
也可以帶以下參數,這些我認為可能容易用到的參數,其它的參數需要另行查找
文檔,比如可以使用正則進行匹配。
內容相關的
-B, --before context=NUM顯示所在行之前的行數
-A, --after context=NUM顯示所在行之後的行數
-C, --context=NUM列印輸出上下文的行數
過濾內容相關的參數:
-i, --忽略大小寫區分
-w,--匹配查找的整個單詞
-x,--匹配查找的整行文本
-v, --過濾掉匹配的內容
輸出內容相關的參數
-n, --行號列印帶有輸出行的行號
比如,我要查找在grep_text.txt文件里不區分大小寫查找sillymadman,並顯示行號和匹配文本的下一行,那麼我可以用以下命令查找
grep sillymadman grep_text.txt -i -n -A1
內容返回為
1:SillyMadman is both a madman and a fool.
2-Everyone agrees with this sentence.
總體而言grep的使用方式就是
grep [參數...](查找的內容) (文件名)
grep也經常搭配管道符號"|"使用,比如我要查詢某程序的進程,並去掉查找進程本身,那麼命令為
ps -ef | grep program_name | grep -v grep
再創建一個文件名為sed_text.txt的文件,並放入內容:
SillyMadman is both a madman and a fool.
Everyone agrees with this sentence.
我想要在第一行下面添加一句:woshishazi
命令是:sed '1a\woshishazi' sed_text.txt
返回內容為:
SillyMadman is both a madman and a fool.
woshishazi
Everyone agrees with this sentence.
但是以上這個命令不會修改原文件,如果需要,需要加上-i
sed -i '1a\woshishazi' sed_text.txt
上面a是代表append,從指定行後面新的一行添加數據,還有其他操作
操作有以下這些
a :從下面一行新增
i :從上面一行插入,
d :刪除
c :整行替換
p :列印
s :對指定內容進行替換
下面稍微舉下例:
a: sed '1a\woshishazi' sed_text.txt 從第一行後面添加
i: sed '1i\woshishazi' sed_text.txt 從第一行前面插入
d: sed '1d' sed_text.txt 刪除第一行
c: sed '1c\woshishazi' sed_text.txt 替換第一行內容為woshishazi
p: sed -n '1p' sed_text.txt 列印第一行,一般搭配-n使用,其他內容就不會再展示
s:這個相對復雜一點需要詳細說明一下
sed的參數為 '[行]s/要被替換的內容/新的內容/g'
行是一個可選項,可以選擇具體的行進行替換
g代表替換所有匹配到的內容,也可以改為數字,表示第幾次匹配到時進行替換
sed 's\SillyMadman\shafengzi\g' sed_text.txt ,將所有SillyMadman替換為shafengzi
輸出結果為:
shafengzi is both a madman and a fool.
Everyone agrees with this sentence.
最後再創建一個文件名為awk_text.txt的文件,並放入內容:
1 a
2 b
3 c
4 d
5 f
以空白符作為分隔符這個文本相當於每一行有兩個欄位。
那麼列印第一個欄位時 awk '{print 0的話,則代表列印所有欄位
awk默認以空白符作為分隔符,也可以指定分割符通過-F
awk -F: '{print $1}' awk_text.txt,以「:」作為作為分隔符
那麼返回內容就為
1 a
2 b
3 c
4 d
5 f
相當於只有一列或者說一個欄位
然後還可以對前面加上一個正則對行進行匹配內容
awk '/a/{print 2 ~ /a/){print $1}' awk_text.txt
返回內容為
1
『玖』 Linux裡面AWK begin作用是什麼
BEGIN{}模塊在awk讀取文件之前就執行,一般用來定義awk的內置變數(預定義變數,eg:FS,RS)
『拾』 Linux awk 命令詳解(二) if 分支 數組
一、awk if分支結構
二、awk數組 for循環
一、awk if分支結構
案例1
awk過濾中的if分支結構
1)單分支
統計/etc/passwd文件中UID小於或等於1000的用戶個數:
統計/etc/passwd文件中UID大於1000的用戶個數:
統計/etc/passwd文件中登錄Shell是「/bin/bash」的用戶個數:
2)雙分支
分別統計/etc/passwd文件中UID小於或等於1000、UID大於1000的用戶個數:
分別統計/etc/passwd文件中登錄Shell是「/bin/bash」、 登錄Shell不是「/bin/bash」的用戶個數:
二、awk數組
注意,awk數組的下標除了可以使用數字,也可以使用字元串,字元串需要使用雙引號:
案例3:awk擴展應用
1)awk統計Web訪問排名
在分析Web日誌文件時,每條訪問記錄的第一列就是客戶機的IP地址,其中會有很多重復的IP地址。因此只用awk提取出這一列是不夠的,還需要統計重復記錄的數量並且進行排序。
通過awk提取信息時,利用IP地址作為數組下標,每遇到一個重復值就將此數組元素遞增1,最終就獲得了這個IP地址出現的次數。
針對文本排序輸出可以採用sort命令,相關的常見選項為-r、-n、-k。其中-n表示按數字順序升序排列,而-r表示反序,-k可以指定按第幾個欄位來排序
實現此案例需要按照如下步驟進行。
步驟一:統計Web訪問量排名
分步測試、驗證效果如下所述。
1)提取IP地址及訪問量
2)對第1)步的結果根據訪問量排名
案例4:編寫監控腳本
本案例要求編寫腳本,實現計算機各個性能數據監控的功能,具體監控項目要求如下:
CPU負載
網卡流量
內存剩餘容量
磁碟剩餘容量
計算機賬戶數量
當前登錄賬戶數量
計算機當前開啟的進程數量
本機已安裝的軟體包數量
步驟
實現此案例需要按照如下步驟進行。
步驟一:准備工作
1)查看性能數據的命令
步驟二:編寫參考腳本
1)腳本內容如下: