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、sed、grep)
https://www.runoob.com/linux/linux-comm-awk.html
可以根據文件指定分隔符,像處理表格一樣處理文本或序列。通常來處理欄位,並基於欄位進行過濾,或進行模式匹配。
語法
常用的內建變數
NF :記錄的欄位數
NR :記錄的行號
OFS :輸出欄位分隔符,默認值與輸入欄位分隔符一致。
ORS :輸出記錄分隔符(默認值是一個換行符)
$n :當前記錄的第n個欄位,欄位間由FS分隔
$0 :完整的輸入記錄
ARGV :包含命令行參數的數組
ARGC :命令行參數的數目
基本用法
awk 腳本
關於 awk 腳本,我們需要注意兩個關鍵詞 BEGIN 和 END。
BEGIN{ 這裡面放的是執行前的語句 }
END {這裡面放的是處理完所有的行後要執行的語句 }
{這裡面放的是處理每一行時要執行的語句
以上的應用案例基本包括了常用的awk 的常用用法,更復雜的文本處理則可以通過awk 腳本完成。
https://www.runoob.com/linux/linux-comm-sed.html
與awk 相比,sed在處理文本的行具有更好的效率。
基本語法
參數說明
sed 文件處理命令
包括增加、刪除、列印、替換行的內容
應用案例
以上的案例表明,sed 的一些操作可以放在行的末尾,或者放在模式匹配的末尾,或者在大括弧內以分號分隔,或者通過-e 命令,實現多點編輯。
https://www.runoob.com/linux/linux-comm-grep.html
grep 查找文件里符合條件的字元串。
語法
應用案例
grep 除了可以查找單個文件中匹配的模式,也可以在目錄中包含特定字元的文件查找匹配模式的行。
㈢ 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
㈣ awk和sed有什麼區別
Linux sed命令是利用腳本來處理文本文件。sed可依照腳本的指令來處理、編輯文本文件。sed主要用來自動編輯一個或多個文件、簡化對文件的反復操作、編寫轉換程序等。
Linux awk命令是一種處理文本文件的語言,是一個強大的文本分析工具。之所以叫AWK是因為其取了三位創始人Alfred Aho、Peter
Weinberger和Brian Kernighan的Family Name的首字元。
主要區別如下:
1、sed是一種非互動式且面向字元流的編輯器,awk則是一門模式匹配的編程語言,因為它的主要功能是用於匹配文本並處理,同時它有一些編程語言才有的語法,例如函數、分支循環語句、變數等等,當然比起我們常見的編程語言,AWK相對比較簡單。
2、sed一般對行進行操作,awk對列進行操作。
3、sed擅長數據修改,awk擅長數據切片,數據格式化,功能最復雜。
4、sed全稱Stream Editor,擅長對文件做數據做修改的操作,非常高效。
5、awk更適合格式化文本,對文本進行較復雜格式處理,awk程序對輸入文件的每一行進行操作;awk是一門解釋型的編程語言,文本處理、輸出格式化的文本報表、執行算數運算、執行字元串操作等等。
㈤ Linux正則表達式與通配符
正則表達式:在計算機科學中,是指一個用來描述或者匹配一系列符合某個句法規則的字元串的單個字元串。在很多文本編輯器或其他工具里,正則表達式通常被用來檢索或替換那些符合某個模式的文本內容。正則表達式這個概念最初是由Unix中的工具軟體(例如sed和grep)普及開的。
只有掌握了正則表達式,才能全面地掌握 Linux 下的常用文本工具(例如:grep、egrep、GUN sed、 Awk 等) 的用法
grep、sed、awk天然支持正則
grep -v代表反選,反向選擇匹配到的內容
grep -E代表使用擴展正則
grep -P代表使用Perl正則
sed -r 代表使用擴展正則
正則表達式分為三類(man grep可以看到,分別是basic RegExs,extended RegExs,perl RegExs)
1、基本的正則表達式(Basic Regular Expression 又叫 Basic RegEx 簡稱 BREs)
2、擴展的正則表達式(Extended Regular Expression 又叫 Extended RegEx 簡稱 EREs)
3、Perl 的正則表達式(Perl Regular Expression 又叫 Perl RegEx 簡稱 PREs)
b. 處理過程:查找文本文件中是否包含要查找的 「關鍵字」(關鍵字可以是正則表達式) ,默認返回匹配的該行的內容
c. grep|egrep處理文件時,按行處理 |
| sed | sed | sed -r | - | a. 處理對象:文本文件
b.處理操作:對文本文件的內容進行 查找、替換、刪除、增加等操作
c. sed 在處理文本文件的時候,按行處理 |
| awk | - | awk | - | a. awk 處理的對象:文本文件
b. awk 處理操作:主要是對列進行操作 |
注意:egrep 或 sed -r 默認使用擴展正則表達式(EREs),一般特殊字元({})可以不轉義
grep -E 以及egrep(Extend Regular Expression)
Linux通配符和三劍客的正則表達式是不一樣的,因此,代表的意義也有較大的區別 。
通配符一般用戶命令行bash環境,而linux正則表達式用於grep, sed, awk場景。
通配符說明
示例:* 的使用:代表任意0-N個字元,代表所有字元
㈥ Linux裡面sed和awk命令哪個重要
你好很高興回答您的問題:
既然接觸到了三劍客的sed和awk,對Linux應該是有些認知了吧.下面基於這個給您介紹下.
Linux的秘籍三劍客 grep,sed,awk是Linux命令,甚至是shell編程部分的核心技術.
掌握與數量可以加速處理文本速度.
grep擅長過濾與正則
sed擅長替換與增刪改查
awk擅長統計計算與取行取列
快收下下面的寶典修煉吧.
㈦ linux awk命令詳解
awk命令是linux下的一個文件管理命令,通常是用於文本和數據進行處理的編程語言,awk命令主要有兩個功能,具體介紹如下: