linuxgawk
⑴ gawk 使用方法簡介
其功能與特性包括:
gawk options program file
構成 gawk 腳本的語句須包含在一對 大括弧 ( {} )中,而作為命令選項的整個腳本需要包含在一對 引號 中:
gawk 會自動地將每行文本中的每個 數據欄位 賦值給一個指定的變數,默認情況下,預先定義的變數為:
文本行中的數據欄位是通過預先定義的 欄位分隔符 來分隔開的,默認為 空格 (包括 TAB )
gawk 語言允許在腳本語句中組合多個命令使用,只需要在各命令之間使用 分號 ( ; )分隔開即可
也可以這樣:
其中 My name is Rich 是運行時程序獲取的用戶輸入,My name is Christine 是程序運行後的輸出
默認情況下,gawk 從輸入中讀取一行文本,再對該文本執行程序指令。而有時候需要在讀取待處理數據之前先執行某些指令,此時就要用到 BEGIN 關鍵字。
同樣的, END 關鍵字允許你指定在數據處理完成後才執行的腳本。
gawk 允許先將其程序腳本保存在某個文件中,再通過 -f 選項指定該文件的文件名。而在腳本文件中,各命令不再需要通過 '' 符號分隔,直接分行列出即可。
程序語言最重要的特性之一就是定義和引用 變數 。gawk 語言支持兩種類型的變數:內建變數和用戶自定義變數。
gawk 程序在處理文本數據時,一次只讀取一小段文本,稱為 Record 。默認的 Record 分隔符即為換行符。而每條 Record 又可進一步劃分成 欄位 (Data Field),並按順序依次賦值給 $1,$2,$n 等。默認的欄位分隔符為空格(包括 TAB)
默認的 OFS 為空格
當定義了 FIELDWIDTHS 變數時,gawk 在讀取數據時就會忽略欄位分割符(FS),轉而使用 欄位寬度 來分割數據。
有些時候會遇到如下組織方式的文本文件:
此時可將欄位分隔符(FS)設置為 " ",Record 分隔符(RS)設置為空字元串,則 gawk 程序會將 空行 作為一條 Record 的終止點。
ARGV 的索引是從 0 開始的,表示第一個命令行參數(呃,所以通常就是 gawk 這個命令本身)。程序腳本(引號中的內容)不算在參數內。
定義數組: var[index]=element
遍歷數組:
匹配符(~)用來對 Record 中的特定欄位使用正則表達式。 !~ 表示不匹配。
if (condition) statement
for( variable assignment; condition; iteration process)
printf 命令格式: printf "format string", var1, var2 . . .
常用格式控制符如下表所示:
除 控制字元 以外,還可以使用另外三種修飾符以對輸出進行更多的控制。
參考下面的示例, %10.1f 中的 10 用於指定欄位的最小寬度(右對齊,前面用空格補), .1 用於指定精確度。
定義函數
使用函數
函數庫
創建函數庫
調用函數庫
linux Command Line and Shell Scripting Bible 3rd Edition
⑵ 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]
⑶ Linux4-文本處理三駕馬車:grep, sed, awk
Linux基礎課程系列:
grep:一種強大的文本搜索工具,它能使用正則表達式匹配模式搜索文本,並把匹配的行列印出來
格式: grep [options] pattern file ([]內的部分可以省略)
sed:流編輯器,一般用來對文本進行 增刪改查 (sed是以 行 為單位來處理的)。
用法: sed [-options] 'script' file(s)
[!] 表示否定,取反(相當於grep -v)
awk是一個強大的文本分析工具,相對於grep的查找,sed的編輯,awk在其 對數據分析並生成報告 時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理。awk有3個不同版本: awk、nawk和gawk,未作特別說明,一般指gawk。gawk 是 AWK 的 GNU 版本。
用法: awk [options] '{script}' file 。
基礎結構: ' {script} '
匹配結構: ' /pattern/{script} '
擴展結構: 'BEGIN{script} {script} END{script}'
awk 在讀取一行文本時,會用預定義的欄位分隔符劃分每個數據欄位,並分配給一個變數。
$0 代表整個文本行;
$1 代表文本行中的第1個數據欄位;
……
$NF 代表文本行中的最後一個數據欄位
awk 默認的欄位分隔符是任意空白字元(如:空格or 製表符),也可以用-F 參數自定義分隔符
⑷ linux中sed,gawk,egrep應該怎麼學
每個命令都有自己的說明文檔,可以man對應命令名查看
也可以到網上找教程。
開始知道最基本的用法就可以了。
不需要學太復雜的。
⑸ 如何在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下使用gawk的執行命令時提示 -f:command not found是什麼原因該如何解決
是不是沒有安裝,試一試用 awk命令或sed命令。
⑺ gawk與nawk 以及awk的區別和如何使用,有點不是很明白請高手賜教
gawk是awk的GPL版,在linux上的awk就是gawk
nawk是new awk是awk的增強版,增加了很多函數,也可以自己定義函數等。
基本用法都差不多。
你完全可以認為它們就是同一個東西!
⑻ linux下把兩個文件對應的id替換
gawk '{ filename="name_of_file_1"; cmd="sed -i 's/"$1"/"$2"/g' "filename; system(cmd); }' name_of_file_2
將name_of_file_1替換成你文件1的名字,將name_of_file_2替換成文件2的名字
這里的要用gawk,其他awk請相應修改
我這里是假設了你文件1中的所有字元用的空格分隔,如果用其它字元分隔要手動定義gawk的參數
⑼ Linux史話:Linux和GNU有什麼關系
首先是GNU計劃,由理查德*斯托爾曼發起。GNU組織發布了一系列的GNU工具集。然後到91年的時候,Linus開發了Linux,當時不過是一個內核;由於Linux採用開放源代碼,所以自然和GNU的開源精神不謀而合,兩者就結合在一起了。其結果就是一個完整的GNU/Linux操作系統出現了。