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的格式:
awk[選項]'BEGIN{編輯指令}{編輯指令}END{編輯指令}'文件
BEGIN{},行前處理
——在讀入行之前的操作,通常用來初始化操作,是可選操作
只做預處理的時候,可以沒有操作文件。可以用這個
{},行處理,
——awk處理讀入的行
END{},行後處理
——awk把所有的行都處理完後執行的操作;一般輸出處理結果
這三個是可以獨立使用的。
val=$(awk
'BEGIN{print 7.01*5-4.01}')
echo $val
這個是行前處理,並沒有對文件進行讀取,它的效果就是對括起來的數進行運算
val=$(awk
'{print 7.01*5-4.01}')
echo $val
它是錯誤的寫法,按照格式來說應該是行處理,但後邊並沒有文件,所以它無法進行操作。
祝你好運~~~~
望採納~~~
③ linux里awk是做什麼的,請詳細說明
awk是一個強大的文本分析工具,相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理。
awk有三個不同的版本:awk、nawk和gawk,未作特別說明,一般指gawk,gawk是awk的GNU版本。
之所以叫awk是因為其取了三位創始人Alfred Aho,Peter Weinberger,和Brian Kernighan的Family Name
的首字元。
使用方法:
awk'{pattern+action}'{filenames}
盡管操作可能會很復雜,但語法總是這樣,其中pattern表示awk在數據中查找的內容,而action是在找到匹配內容時所執行的一系列命令。花括弧({})不需要在程序中始終出現,但它們用於根據特定的模式對一系列指令進行分組。pattern就是要表示的正則表達式,用斜杠括起來。
awk語言的最基本功能是在文件或者字元串中基於指定規則瀏覽和抽取信息,awk抽取信息後,才能進行其他文本操作。完整的awk腳本通常用來格式化文本文件中的信息。
通常,awk是以文件的一行為處理單位的。awk每接收文件的一行,然後執行相應的命令,來處理文本。
調用awk的三種方式
1、命令行方式
awk[-F field-separator]'commands'input-file(s)
其中,commands是真正awk命令,[-F域分隔符]是可選的。input-file(s)是待處理的文件。
在awk中,文件的每一行中,由域分隔符分開的每一項稱為一個域。通常,在不指名-F域分隔符的情況下,默認的域分隔符是空格。
2、shell腳本方式
將所有的awk命令插入一個文件,並使awk程序可執行,然後awk命令解釋器作為腳本的首行,一遍通過鍵入腳本名稱來調用。
相當於shell腳本首行的:#!/bin/sh
可以換成:#!/bin/awk
3、將所有的awk命令插入一個單獨文件,然後調用:
awk-f awk-script-file input-file(s)
其中,-f選項載入awk-script-file中的awk腳本,input-file(s)跟上面的是一樣的。
④ linux shell中awk的用法
所有的編程書籍都是通過一個「Hello world!」簡單程序入門,作為借鑒,本文也採用此方法帶大家入門。現在,在當前目錄下建立一個文本文件hello.txt,內容如下:
Hello world!
在命令行中輸入以下命令:
$ awk '{ print }' hello.txt
執行後hello.txt文件的內容顯示在屏幕上。編寫並且執行awk程序的方法很簡單,如上所示,花括弧內的是程序代碼,後面的hello.txt為指定的輸入文件。awk是一種行處理程序,執行awk時,它依次對輸入文件中的每一行執行花括弧中的代碼,如上面的例子,就是對hello.txt中的每一行執行print命令。所有輸出都發送到stdout,最後在屏幕上顯示的結果為「Hello world!」。
上面的例子是將腳本作為命令行自變數傳遞給awk,我們也可以把腳本寫入一個外部文件,然後通過-f選項向awk傳遞這個腳本文件。例如編寫腳本文件hello.ask如下:
{ print }
然後通過如下方式執行:
$ awk -f hello.awk hello.txt
這種編寫獨立腳本文件的方式應用在多行、比較復雜的程序上,非常合適,而且,在後面你還將看到,這種方式還可以讓你非常方便地使用附加awk功能。