導航:首頁 > 程序命令 > awk命令用法

awk命令用法

發布時間:2022-07-26 18:31:20

『壹』 awk的用法

我們都知道awk的模式是pattern{action},就是當pattern成立時進行action的動作,乍一看,上面咋不符合這個模式呢?其實是省略啦!awk有一些默認的省略規則,省略action部分時表示默認為「{print $0}」,也就是列印整行內容;pattern部分為「/^-/」,是一個正則表達式,其實也是省略的寫法啦,完整的寫法為「$0 ~ /^-/」,所以擴充完應該為「awk '$0 ~ /^-/ {print $0}」,意思就是「列印第一個字元為-的行」,那麼整行代碼的意思就是「統計目錄/userhome/mumsg/PRL/下的常規文件數目」。

『貳』 linux awk命令怎麼用

awk命令是Alfred Aho, Peter Weinberger, Brian Kernighan三位作者聯合開發的,用於Linux/Unix中處理數據和產生報告。awk命令功能十分強大,可根據需要抓取、截取指定的列或行。
首先在/mnt目錄下創建示例文本文件f1,其內容如下:
1 hello hello
2 data data
3 xyz abc
4 123 789
5 ftp
6 Apache
7 apache
然後,使用awk對f1文件內容進行處理,舉例如下。
①awk -F " " '{print $2,$3}' f1:截取顯示文檔的第二列和第三列,-F指定分隔符為空格,$表示顯示第幾列。其中print表示要做輸出信息的動作,$2和$3表示要輸出的列號,awk要求將print已經輸出列等內容放在「'{}'」之間。
②awk -F " " '($1>3){print $2,$3}' f1:選取第一列的值大於3的行,顯示其第二列和第三列,在「()」中指定篩選條件。
③awk 'NR==4 || NR==3' f1:顯示第三行和第四行,NR表示行號。
④awk '/data/ {print $2}' f1:抓取包含指定字元的行,再對列進行截取。此例中,awk先按照「data」字元串對文件f1中的行篩選,找出包含「data」的行以後,再按照默認的空格作為分隔符對行的內容做切割,僅列印出第二列的內容。
⑤awk '$2 ~ /data/ ' f1:抓取第二列包含指定字元的行。其中「~」表示是否匹配指定的「data」,如果第二列的內容包含「data」就列印出整行內容。
⑥awk '$2 !~ /data/ ' f1:抓取第二列不包含指定字元的行。其中「!~」表示是否不匹配指定的「data」,如果第二列的內容不包含「data」就列印出整行內容。

『叄』 awk命令詳解是什麼

簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理。

awk是一個強大的文本分析工具,相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤為強大。

運算與判斷:

作為一種程序設計語言所應具有的特點之一,awk支持多種運算,這些運算與C語言提供的基本相同:如+、-、*、/、%等等,同時,awk也支持C語言中類似++、--、+=、-=、=+、=-之類的功能,這給熟悉C語言的使用者編寫awk程序帶來了極大的方便。

作為對運算功能的一種擴展,awk還提供了一系列內置的運算函數(如log、sqr、cos、sin等等)和一些用於對字元串進行操作(運算)的函數(如length、substr等等)。這些函數的引用大大的提高了awk的運算功能。

作為對條件轉移指令的一部分,關系判斷是每種程序設計語言都具備的功能,awk也不例外。awk 中允許進行多種測試,如常用的==(等於)、!=(不等於)、>(大於)、>=(大於等於)、<=(小於等於)等等,同時,作為樣式匹配,還提供了~(匹配於)和!~(不匹配於)判斷。

作為對測試的一種擴充,awk也支持用邏輯運算符:!(非)、&&;(與)、||(或)和括弧()進行多重判斷,這大大增強了awk的功能。本文的附錄中列出了awk所允許的運算、判斷以及操作符的優先順序。

『肆』 Linux中sed命令同awk命令有什麼區別呢,具體該如何使用呢

sed 多用來編輯修改
awk 多用來列印
sed grep awk 俗稱三劍客
使用上sed 和 awk擴展下來,內容可多了,甚至awk可以被當作一種腳本工具,單獨出書,sed簡單的用法增刪改查都是可以直接網路到的,awk的列印也是。
例如 sed中
s 替換
sed 's/zhangsan/lisi/' yourfile 就是將zhangsan替換為lisi ,列印不執行
加上i後才真正執行 sed -i 's/zhangsan/lisi/' yourfile
d 刪除
sed '/zhangsan/d' yourfile
sed -i '/zhangsan/d' yourfile
a 追加
sed -i '/zhangsan/alisi' yourfile
i 前插

sed -i '/zhangsan/ilisi' yourfile
p 列印
sed -n '/zhangsan/p' yourfile
因為它本身也會列印一般,所以加 -n 不默認列印

awk
-F 指定分隔符
awk -F ':' '/^root/{print $7}' /etc/passwd
列印以 root開頭所在行,以「:」為分隔符,列印第七列
其效果就是列印了root的shell
純手打,望採納,謝謝,遇到具體問題仍可繼續交流

『伍』 關於awk用法

在正文部分定義的變數,END部分也可以調用的。既然是awk變數,在awk作用域中的任何地方都可以使用。你在END部分注釋掉asort,直接列印變數 i 和 code[i] 看看就知道了。

manawk,看看asort函數的說明:

asort(s[,d])
gwith1

也就是說,數組下標會變掉。這是asort導致的。

用asort的時候使用第二個參數就可以了:

,thensisfirstplicatedintod,andthendissorted,.

這樣就會先將數組s拷貝到數組d中,再對d按值排序,這樣原數組s的下標就不會受到影響。

下面是我想到的方法,也許不是最好的:

#!/bin/awk-f
BEGIN{
print"Code sum scale flow flowscale ";
}
{
code[$9]++;
}
END{
n=asort(code,new);
for(i=1;i<=n;i++)
{
for(jincode)
{
if(code[j]==new[i])
{
printf("%d %d ",j,code[j]);
break;
}
}
}
}

按$9欄位出現的次數由小到大排序。

輸出的時候,第一列為原$9數據,第二列為出現次數。這是我對你原代碼的理解。

『陸』 如何使用awk命令,列印除第一個域之外的其它

[root@iZ259r7h4pfZ ~]# cat 1
1 a A
2 b B
3 c C
[root@iZ259r7h4pfZ ~]# cat 1 |awk -F " " '{for(i=2;i<=NF;i++){ printf("%s ",$i);} printf("\n")}'
a A
b B
c C

『柒』 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功能。

『捌』 awk的使用 第八部分 awk如何讀取命令行的參數

}’ $* 執行結果如下: [root@myfreelinux pub]# bash analyse.awk first-arg second-argawkfirst-argsecond-arg解釋說明:ARGC,ARGV[ ]是awk的內建變數。 ARGC :是一整數,代表命令行上除了選項-v, -f 及其對應的參數之外所有參數的個數。 ARGV[ ] 是一字元串數組,ARGV[0],ARGV[1],。。。ARGV[ARGC-1]分別代表命令行上相對應的參數。 比如在這里執行的命令[root@myfreelinux pub]# bash analyse.awk first-arg second-arg,ARGC的值是3,ARGV[0]是awk,ARGV[1]的值為first-arg, ARGV[2]的值是second-arg。 再比如#awk -vx=21-f program fir-data sec-data和#awk ‘{ print $1 ,$2 }’fir-data sec-data 這兩條ARGC 值都是3,ARGV[0]是awk,ARGV[1]是fir-data,ARGV[2]是sec-data,命令行上的-f program, -vx=21″,程序部分’{ print $1, $2}’ 都不會被列入ARGC和ARGV[ ]中。 awk 利用ARGC 來判斷要打開的數據文件的個數,但是用戶可以強行更改ARGC的值;比如將ARGC的值被用戶設置為1,那麼awk將被蒙騙,誤以為命令行上沒有數據文件文件, 所以不會以ARGV[1],ARGV[2]等作為文件名來打開文件並讀取數據;但是在程序中可以使用ARGV[1],ARGV[2]等變數來取得命令行上數據文件的數據。 現在有一個awk程序內容如下: [root@myfreelinux pub]# cat test1.awk #!/bin/awk -fBEGIN{for(i=0;i<ARGC;i++) print ARGV[i];}執行以上程序的結果如下: [root@myfreelinux pub]# awk -f test1.awk arrive.dat today_result1awkarrive.dattoday_result1 加入將test1.awk的內容更改成test2.awk的內容如下: [root@myfreelinux pub]# cat test2.awk #!/bin/awk -fBEGIN{number=ARGC;#用number 記住實際的參數個數 ARGC=2;#設置ARGC=2,awk將以為只有一個資料文件 for(i=0;i<ARGC;i++) print ARGV[i];}執行並查看運行結果: [root@myfreelinux pub]# awk -f test2.awk arrive.dat today_result1 today_result2awkarrive.dat這個時候會發現,雖然同樣ARGC=3,但是人為的設置ARGC=2,後,awk在執行的時候,只認為有一個參數arrive.dat。 將test2.awk修改成以下內容: [root@myfreelinux pub]# cat test3.awk #!/bin/awk -fBEGIN{number=ARGC;ARGC=2;for(i=0;i<ARGC;i++) print ARGV[i]; for(i=ARGC;i<number;i++) print ARGV[i];}運行並查看運行結果如下: 顯然,通過修改ARGC可以修改awk能夠識別的參數的個數,但是實際存在的ARGV的內容,仍然可以訪問的。

『玖』 awk的幾個常用高級用法

1、同時指定多個分割符
這時應該把分隔符寫成放到方括弧中,如$awk -F'[ :/t]' '{print $1,$3}' test

此時指定了空格,:號,tab三個作為分隔符

2、awk的key的變態用法
awk '{a[$1,"/t", $2] += $4} END {for (uin in a) printf("%s/t%d/n", uin, a[uin]) }' test
用$1"/t"$2組成一維數組的key,這樣可以用這種方式來處理很多復雜的二維數據邏輯

3、awk 的范圍模板
范圍模板匹配從第一個模板的第一次出現到第二個模板的第一次出現之間所有行。如果有一個模板沒出現,則匹配到開頭或末尾。

如$ awk '/root/,/mysql/' test將顯示root第一次出現到mysql第一次出現之間的所有行。

4、awk的重定向
awk 可使用shell的重定向符進行重定向輸出,如:$ awk '$1 = 100 {print $1 > "output_file" }' test。上式表示如果第一個域的值等於100,則把它輸出到output_file中。也可以用>>來重定向輸出,但不清空文件,只做追加操作。

這樣可以利用重定向,可以把不同的結果集寫入到不同的文件里
比如,我經常要跑出vip1,2,3,4,5,6的6份文件,那麼就可以寫一個腳本,一次性都跑出來了

5、 awk -F"|" 'NR == FNR { a[$1] = $2 } NR > FNR { if (a[$1]!=""){ a[$1] = $2 - a[$1]; if(a[$1] > 0 && $2 == 2) print $0;} }' test test1

『拾』 Unix下,awk用法

awk '{print $0}' filename

參考這句話。print $0是所有列 你可以將$0替換成,你需要列印的列
例如awk '{print $2}' "123 456 789"
就只會列印456
要用awk就要先了解awk的原理。知道原理了再去用會很方便的。祝好~

閱讀全文

與awk命令用法相關的資料

熱點內容
程序員理發店生意怎麼樣 瀏覽:601
程序員羅技 瀏覽:180
軟考初級程序員課程2021下載 瀏覽:487
杭州程序員奶奶 瀏覽:878
不聽命令造成錯誤 瀏覽:979
kool系統源碼 瀏覽:608
流氓app在哪裡看 瀏覽:98
域名購買了怎麼指向伺服器 瀏覽:121
安卓手機如何讓照片顏色反轉 瀏覽:859
怎麼下載卓睿安手機版 瀏覽:514
h3crange命令 瀏覽:468
php前景和python 瀏覽:338
php壓縮圖片內存大小 瀏覽:495
在哪裡可以查看雲伺服器的信息 瀏覽:70
python讀取非txt文件 瀏覽:799
艾莫迅用什麼編程軟體好 瀏覽:227
android文件存儲讀取 瀏覽:214
php基礎教程第5版 瀏覽:543
伺服器裡面怎麼刷東西 瀏覽:194
榮耀手機如何快速把app切換頁面 瀏覽:798