當前位置:成語大全網 - 書法字典 - shell awk命令的詳細解釋

shell awk命令的詳細解釋

Awk命令

Awk是壹種用於在linux/unix下處理文本和數據的編程語言。數據可以來自標準輸入(stdin)、壹個或多個文件,或者其他命令的輸出。支持用戶自定義函數、動態正則表達式等高級功能,是linux/unix下功能強大的編程工具。它在命令行中使用,但更多時候是作為腳本使用。Awk有很多內置函數,比如數組和函數,這和C語言是壹樣的。靈活性是awk最大的優勢。

Awk命令格式和選項

語法格式

Awk =1這樣的訪問是允許的。Awk使用壹個特殊的字符串子集作為分段字段。類似於壹維數組的成員測試,多維數組可以使用if ((i,j) in array)的語法,但是下標必須放在括號內。與壹維數組的循環訪問類似,多維數組使用for(數組中的項)等語法來遍歷數組。與壹維數組不同,多維數組必須使用split()函數來訪問各個下標組件。

awk 'BEGIN{

for(I = 1;我& lt=9;i++){

for(j = 1;j & lt=9;j++){

tarr[i,j]= I * j;

打印I," * ",j," = ",tarr[i,j];

}

}

}'

awk 'BEGIN{

for(I = 1;我& lt=9;i++){

for(j = 1;j & lt=9;j++){

tarr[i,j]= I * j;} }

對於(米在塔爾){

split(m,tarr2,SUBSEP);

打印tarr2[1]," * ",tarr2[2]," = ",tarr[m];} }'

內置函數

算術函數

格式描述

Atan2( y,x)得出y/x的反正切值。

Cos( x)返回x的余弦值;x是弧度。

Sin( x)返回x的正弦值;x是弧度。

Exp( x)返回x的冪函數。

Log( x)返回x的自然對數。

Sqrt( x)返回x的平方根。

Int( x)返回x的截斷整數值。

Rand()返回任意數字n,其中0

Srand( [Expr])將rand函數的種子值設置為Expr參數的值,如果省略Expr參數,則使用壹天中的時間。返回上壹個種子值。

awk 'BEGIN{

OFMT = " % .3f#OFMT將輸出數據格式設置為保留3位小數。

fs = sin(1);

Fe = exp(10);

fl = log(10);

fi = int(3.1415);

打印fs,fe,fl,fi;

}'

輸出結果為:0.841 22026.466 2.303 3。

awk 'BEGIN{

srand();

fr = int(100 * rand());

打印fr;

}'

產量:78

字符串處理功能

格式描述

Gsub( Ere,Repl,[In])的執行與sub函數完全相同,只是替換了正則表達式的所有具體值。

Sub( Ere,repl,[In])在Repl參數指定的字符串中替換Ere參數指定的擴展正則表達式的第壹個具體值。sub函數返回替換的次數。&;它出現在Repl參數指定的字符串中;(和符號)由in參數指定的字符串替換,該字符串與Ere參數指定的擴展正則表達式相匹配。如果沒有指定In參數,默認值是整個記錄($0記錄變量)。

Index (String1,String2)返回由參數String1指定的字符串中的位置(其中出現了由String2指定的參數),數字從1開始。如果String2參數沒有出現在String1參數中,則返回0(零)。

Length [(String)]返回由String參數指定的字符串的長度(以字符形式)。如果沒有給定字符串參數,則返回整個記錄的長度($0記錄變量)。

Blendth [(String)]返回由String參數指定的字符串長度(以字節為單位)。如果沒有給定字符串參數,則返回整個記錄的長度($0記錄變量)。

Substr( String,M,[N])返回由N參數指定的字符數的子字符串。子字符串是從String參數指定的字符串中獲取的,它的字符從m參數指定的位置開始。m參數是用字符串參數中的第壹個字符作為數字1來指定的。如果沒有指定n參數,子字符串的長度將是從m參數指定的位置到字符串參數結尾的長度。

Match( String,Ere)返回由String參數指定的字符串中Ere參數指定的擴展正則表達式出現的位置(字符形式),從1開始計數,如果Ere參數沒有出現,則返回0(零)。RSTART特殊變量被設置為返回值。RLENGTH特殊變量設置為匹配字符串的長度,如果沒有找到匹配項,則設置為-1(減壹)。

Tolower( String)返回由String參數指定的字符串,字符串中的每個大寫字符都將被改為小寫。大寫和小寫之間的映射是由當前語言環境的LC_CTYPE類別定義的。

Toupper( String)返回由String參數指定的字符串,字符串中的每個小寫字符都將變為大寫。大寫和小寫之間的映射是由當前語言環境的LC_CTYPE類別定義的。

Sprintf(格式,表達式,表達式,...)根據format參數指定的printf子例程格式字符串格式化expr參數指定的表達式,並返回最終生成的字符串。

註意:Ere可以是正則表達式。

時間函數

格式描述

Mktime (yyyymm DD hh mm ss [dst])生成時間格式

Strftime ([format [,timestamp]])格式化時間輸出,並將時間戳轉換為時間字符串的特定格式,如下表所示。

SYSTIME()獲取時間戳並返回從1970 65438+10月1到當前時間的整數秒(不包括閏年)。

Strftime日期和時間格式說明符:

格式描述

%壹周中某壹天的縮寫(Sun)

壹周中的某壹天(星期日)的完整拼寫

% b月份名稱的縮寫(十月)

% b月份名稱的完整拼寫(十月)

% c本地日期和時間

% d十進制日期

% d日期08/20/99

% e日期,如果只有壹位數字,將添加壹個空格。

% h以十進制的24小時格式表示小時。

% I以12小時的十進制格式表示小時。

% j 65438+10月1是壹年中的哪壹天?

% m十進制月份

十進制的% m分鐘

% p12小時制(上午/下午)

十進制的% s秒。

% u壹年中的第幾周用十進制表示(星期日是壹周的開始)

% w十進制星期幾(星期日為0)

% w壹年中的第幾周用十進制表示(星期壹是壹周的開始)

% x重置本地日期(1999年8月20日)

% x重置本地時間(12: 00: 00)

% y兩位數年份(99)

% y當前月份

% z時區(PDT)

%%百分號(%)

#mktime使用

awk ' BEGIN { t stamp = mktime(" 2001 01 01 12 12 12 ");打印strftime("%c ",t stamp);}'

輸出:2001 01 01周壹12小時12分鐘12秒。

awk ' BEGIN { tstamp 1 = mktime(" 2001 01 01 12 12 12 ");tstamp 2 = mktime(" 2001 02 01 0 0 ");打印ts tamp 2-ts tamp 1;}'

輸出:2634468

#求兩個時間段的時間差,介紹strftime的使用方法。

awk ' BEGIN { tstamp 1 = mktime(" 2001 01 01 12 12 12 ");tstamp 2 = systime();打印ts tamp 2-ts tamp 1;}'

輸出:308201392

其他壹般功能

格式描述

Close( Expression)使用帶有字符串值的相同表達式參數來關閉由print或printf語句或通過調用getline函數打開的文件或管道。如果文件或管道成功關閉,則返回0;否則,將返回壹個非零值。如果您計劃編寫壹個文件,然後在同壹個程序中讀取它,那麽close語句是必要的。

System(Command)執行Command參數指定的命令,並返回到退出狀態。相當於系統子程序。

Expression | getline [Variable ]從由Expression參數指定的命令的輸出中讀取輸入記錄並通過管道傳輸它,然後將記錄的值賦給由Variable參數指定的變量。如果以Expression參數的值作為其命令名的流當前未打開,則創建壹個流。創建的流相當於調用popen子例程,其中Command參數采用Expression參數的值,Mode參數的值設置為r。只要流保持打開並且Expression參數的計算結果為相同的字符串,getline函數的每個後續調用都會讀取另壹條記錄。如果未指定Variable參數,則將$0記錄變量和NF特殊變量設置為從流中讀取的記錄。

getline[Variable]& lt;Expression從由expression參數指定的文件中讀取下壹條輸入記錄,並將由Variable參數指定的變量設置為記錄的值。只要流保持打開,並且Expression參數計算為相同的字符串,就為getline函數的每個後續調用讀取另壹個記錄。如果未指定Variable參數,則將$0記錄變量和NF特殊變量設置為從流中讀取的記錄。

Getline [Variable ]將由Variable參數指定的變量設置為從當前輸入文件中讀取的下壹個輸入記錄。如果沒有指定Variable參數,則$0記錄變量被設置為記錄的值,並且還設置了NF、NR和FNR特殊變量。

#打開外部文件(關閉使用)

awk ' BEGIN { while(" cat/etc/passwd " | getline){ print $ 0;};close("/etc/passwd ");}'

輸出:root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nolog in daemon:x:2:2:daemon:/sbin:/sbin。

#逐行讀取外部文件(如何使用getline)

awk ' BEGIN { while(getline & lt;"/etc/passwd "){ print $ 0;};close("/etc/passwd ");}'

輸出:root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nolog in daemon:x:2:2:daemon:/sbin:/sbin。

awk 'BEGIN{print "輸入您的姓名:";getline名稱;打印姓名;}'

輸入您的姓名:

程默

程默

#調用外部應用程序(系統使用方法)b返回值,就是執行結果。

awk ' BEGIN { b = system(" ls-al ");打印b;}'

輸出:總計42092 drwxr-xr-x14程默程默4096 09-30 17:47 . drwxr-xr-x95根4096 10-08 14:01。..