awk是一種很棒的語言,適合文字處理和報表生成。
使用方法
awk 『』
儘管操作可能會很複雜,但是語法總是這樣,其中pattern表示awk再資料中查詢的內容,而action是再找到匹配內容時所執行的一系列命令,包括({})不需要再程式中始終出現,pattern就是要表示的正規表示式,用斜槓括起來。action可以有很多的語句,用;號隔開。
引數-f引數:指定分隔符,可指定乙個或多個
-f:從指令碼檔案中讀取awk命令
-mf nnn and -mr nnn:對nnn值設定內在限制,-mf選項限制分配給nnn的最大塊數目,-mr限制記錄最大數目。
-w:詳情參考
begin和end模組
通常來說,對於每個輸入行,awk都會執行每個指令碼**塊一次,然而,再許多程式設計情況中,可能需要再awk開始處理輸入檔案中的文字之前執行初始化**。對於這種情況,awk允許您定義乙個begin塊。
awk開始處理輸入檔案之前都會執行begin塊,因此它是初始化fs(字段分隔符)變數,列印頁首或初始化其他再程式中以後會引用的全域性變數的極佳位置
awk還提供了end塊,再處理輸入檔案中的所有行之後執行這個塊,通常用於執行最終計算或者列印應該出現再輸出流結尾的摘要資訊。
awk包含了賦值運算子,邏輯運算子||、&&。正則運算子、!。關係運算子,算數運算子,
其他運算子
$:字段引用
空格:字串鏈結符
?: :三目運算子
ln:陣列中是否存在某鍵值
常用的awk內建變數
$0:當前記錄
1
1~1n:當前記錄的第n個字段
fs:輸入字段分隔符,預設是空格
rs:輸入記錄分隔符,預設是換行符
nf:當前記錄中的字元個數,就是有多少列
nr:已經讀出的記錄數,就是行號,從1開始
ofs:輸出字段分隔符,預設也是空格
ors:輸出的記錄分隔符,預設為換行符
字段分隔符fs
fs="\t"乙個或者多個tab分割
nf:字段數量,比如』nf8』
nr:記錄數量,比如』nr2』
rs:記錄分隔符變數,
ofs:設定輸出結果$1,2...
2...
2...
n之間的分隔符。
ors:輸出記錄分隔符設定,就是輸出結果行與行之間的分割符
awk正則
:行首定位符(root)匹配所有root開頭的行
: 行位
定位符(
root
:行位定位符(root
:行位定位符
(roo
t)匹配所有root結尾的行
.:匹配任意單個字元
*:匹配0
?:匹配0個或者1個前導字元
:匹配自定字元組內的任意乙個字元/1
,匹配以字元a或b或c開頭的行
:匹配不再指定字元組內任意乙個字元。/[^abc],匹配不以a,b,b開頭的行
():子表示式組合。/(rool)+/表達乙個或者多個rool組合,當有一些字元需要組合時,使用括號括起來
|:或者的意思。/(root)|b/匹配root或者b的行
\:轉移字元。/a///匹配a//
,!:匹配、不匹配的條件語句。$1~/root/匹配第乙個字段包含字元root的所有記錄。
x:x重複了m次
x:x重複至少m次
x:x重複至少m次,但是不超過n次
uniq一般和sort一起使用,用來對排序好的內容去重
命令格式
uniq [-cdu][-f《字段》][-s《字元位置》][–help][–version][輸入檔案]【輸出檔案】
引數:-c或者–count 在每列旁邊顯示該行重複出現的次數
-d或–repeated 僅顯示重複出現的行
-f《字段》或–skip-fields=《字段》 比較時跳過前n列,從n+1開始比較
-s《字元位置》或–skip-chars=《字元位置》比較時跳過前n個字元,從n+1個字元開始比較
-u或–unique 僅顯示出現一次的行
-w《字元位置》或–check-chars=《字元位置》對每行第n個字元之後的內容不作對照
預設去重
sort -k 2,2 file_name | uniq:去掉所有重複的項
比較時跳過前n列,從n+1列開始比較(注意是列跳過)
sort -k 2,2 filename | uniq -f 3(跳過前3列)
對每行第n個字元以後的內容不作對照,忽略n以後的字元
sort -k 2,2 filename | uniq -w 1(第乙個字元之後不作比較)
跳過前n個字元,從n+1開始比較(和3相反)
sort -k 2,2 filename | uniq -s l
在每列旁邊顯示該行重複出現的次數,並僅顯示出現一次的行
sort -k 2,2 filename | uniq -c -u(僅僅顯示出現一次的行)
在每列旁邊顯示該行重複出現的次數,並僅顯示重複出現的行
sort -k 2,2 file_name | uniq -d -c(僅僅顯示重複的行以及次數)
sort用來進行對檔案中的每一行作為乙個單元,相互比較進行排序(排序原則為ascii碼)
引數講解
-u:sort -u filename:輸出行去除重複行。只識別-k指定的域
-r:預設排序方式時公升序,-r就是降序
-n:按照數字來及逆行排序
-o:sort預設輸出到標準輸出,使用重定向才能寫到檔案,但是寫入原始檔就不行了。-o就是將結果寫入到乙個新檔案,當檔名相同時,這時候就時將新的結果寫入到新檔案
-k:指定的列(指定的列一般搭配著-t來進行時核定間隔符)
-t:設定間隔符。後面跟間隔符
-f:將小寫字母轉換為大寫字母來進行比較(忽略大小寫)
-c:檢查檔案是否已經排好序了,如果亂序,輸出第乙個亂序的
-c:檢查檔案是否已排好序,如果亂序,不輸出內容,返回1
-m:會以月份排序,比如jan小於feb
-b:會忽略每一行前面的所有空白部分,從第乙個可見字元開始比較
對-k引數的詳解
-k是排序的時候對排序列表的選擇。
問題1:當遇到多個排序關鍵字怎麼辦?
-k1 -k2 -k3 -k4都是可以的
sort -t 』 』 -k2rn -k3n filename
對空格進行分割列表,第二列進行rn(倒序、數字)排序,對第三列進行n(數字)排序
-k的具體語法格式。
[fstart[.cstart]][modifier][,[fend[.cend]][modifier]]
這個語法格式可以被其中的逗號「,」分為兩個部分,start部分和end部分。
start部分也由三個部分組成,其中的modifier部分就是我們之前說的類似n和r選項部分。
cstart也是可以省略的,省略的話就表示從本域的開頭部分開始。之前的例子中的-k2和-k3就是省略了cstart…(太多了不易懂,直接舉例子)
對列的第幾個字元開始比較
sort -t 』 』 -k1.2 filename:對分列之後第一列第二個字元開始排序
sort -t 』 』 -k1.2,1.2 filename:對特定的位置1.2的位置作為排序關鍵字
abc ↩︎
Linux命令三劍客
grep的簡單使用 grep的主要作用 文字搜尋工具,根據使用者指定的 模式 對目標文字逐行進行匹配檢查 列印匹配到的行 grep的工作模式 由正規表示式字元及文字字元所編寫的過濾條件 grep的用法 grep options pattern file options v 顯示不被pattern匹配...
Linux三劍客老三 grep
linux三劍客,最常用的linux命令之grep 程式設計三分鐘 grep擅長查詢功能 在這裡為了節省篇幅,我就不一一解釋了,只介紹一些非常常用的組合。grep rl love dir file3.txt file.txt file2.txt 複製 grep inr it doesn t dir ...
linux 三劍客老三grep
linux中常用的文字 awk,sed,grep 處理工具之一 首先談一下grep命令的常用格式為 grep 選項 模式 檔案 grep家族總共有三個 grep,egrep,fgrep 引數 引數 用途 color auto 過濾的內容加顏色 v取反 r遞迴查詢 i不區分大小寫 n顯示行號 w按單詞...