shell中的流編輯器awk工作原理

2022-09-20 11:21:11 字數 1867 閱讀 6664

逐行讀取文字,預設以空格或tab鍵為分隔符進行分隔,將分隔所得的各個字段儲存到內建變數中,並按模式或者條件執行編輯命令。

sed命令常用於一整行的處理,而awk比較傾向於將一行分成多個"字段"然後再進行處理。

awk資訊的讀入也是逐行讀取的,執行結果可以通過print的功能將字段資料列印顯示。在使用awk命令的過程中,可以使用邏輯操作符 "&am程式設計客棧p;&「表示"與」、 「ii"表示"或」、 "!「表示"非」; 還可以進行簡單的數**算,如 +、一、*、/、%、^ 分別表示加、減、乘、除、取餘和乘方。

awk 選項 "模式或條件 [操作]"  檔案1 檔案2

awk -f 指令碼檔案 檔案1 檔案2

awk常見的內建變數(可直接使用)

內建變數說明fs列分割符,制定和每行文字的字段分割符,預設為空格或者製表符nf當前處理的行的字段個數nr當前處理行的行號(序數)$0當前處理行的整行內容$n當前處理行的第n個字段(第n列)filename被處理的檔名rs行分隔符,awk從文字上讀取資料時,將根據rs的定義把資料切割成許多條記錄,而awk一次僅讀入一條,以進行處理,預設值是\n

awk '(nr>=1)&&(nr<=4)' 11.txt#輸出第一到第四行

111111

22222

233333

444444

awk '(nr==1)||(nr==4)' 11.txt#輸出第一和第四行

111111

444444

awk 'nr==1,nr==2' 11.txt#輸出第一和第二行

111111

22222

awk '(nr%2)==1' 11.txt#輸出奇數行

111111

233333

55555

awk '(nr%2)==0' 11.txt#輸出偶數行

22222

444444

66666

awk '/^1/' 11.txt#輸出以1為開頭的行

111111

awk '/2$/' 11.txt#輸出以2為結尾的行

22222saqhbfmjr

awk 'begin;/^2/;end ' 11.txt

#統計以2開頭的行的行數

2begin模式表示,在處理指定文字之前,需要先執行begin模式中指定的動作,awk再處理指定的文字,之後再執行end模式中指定的動作,end{}語句塊中,往往會放入列印結果等語句。

欄位3為使用者賬號的uid

欄位4為所屬基本組賬號的gid

awk通過管道符,雙引號呼叫shell命令

#!/bin/bash

#獲取ip

ifconfig | awk '(nr==2) '

#對分段後的ip位址賦值給乙個變數

ip=`ifconfig |awk '(nr==2) ' | awk 'begin ; '`

#進行外層迴圈,四次

for a in $ip

do #進行內迴圈,選用減法進行迴圈,如果外層迴圈的值比被減數大,則取餘數,並輸出1;反之則輸出0,且不取減法結果。

for ((i=1;i<=255;saqhbfmjri+=$i))

dom=$[128/$i]

sum=$[$a-$m]

if [ $a -ge $m ]

then

a=$[$a-$m]

echo -n "1" #不換行輸出

else

echo -n "0" #不換行輸出

fidone

echo " " #進行系統預設的空格換行操作

done > test.txt

ip1="`cat test.txt`"

echo $ip1 | sed 's/ /./g'

Shell中的流編輯器sed

sed編輯器被稱作流編輯器 stream editor 和普通的互動式文字編輯器恰好相反。在互動式文字編輯器中 比如vim 你可以用鍵盤命令來互動式地插入 刪除或替換資料中的文字。流編輯器則會在編輯器處理資料之前基於預先提供的一組規則來編輯資料流。sed options command file s...

shell文字編輯器 awk用法

awk 命令 執行語句 檔名 awk 命令 正則 檔名 f 指定分隔符。不寫就是以乙個或多個空格為分隔符。v var value 賦值乙個使用者定義變數,將外部變數傳遞給awkbegin語句塊 在awk開始從輸入流中讀取行之前被執行,這是乙個可選的語句塊,比如變數初始化 列印輸出 的表頭等語句通常可...

shell指令碼 sed流編輯器

sed n pattern command file n 顯示pattern查詢出的匹配行 不加 n會顯示原來的行與匹配的行 e 直接在命令列進行sed編輯 sed n e aaaaa p e aaaa p file p是列印的意思 f 有時上文中紅色的長度過長 可以把上文紅色放在檔案file1中 ...