今天我們來(lái)看看 AWK,那么 AWK 是什么呢?AWK 是一個(gè)優(yōu)良的文本處理工具,Linux 及 Unix 環(huán)境中現(xiàn)有的功能最強(qiáng)大的數(shù)據(jù)處理引擎之一。它的分類有 NAWK GAWK AWK。AWK 經(jīng)過(guò)改進(jìn)生成的新的版本 GAWK,NAWK,現(xiàn)在默認(rèn)linux系統(tǒng)下日常使用的是 GAWK。
十余年的潁上網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷(xiāo)型網(wǎng)站的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整潁上建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“潁上網(wǎng)站設(shè)計(jì)”,“潁上網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。下來(lái)我們來(lái)看看 AWK 的執(zhí)行流程,如下圖所示
我們看到它也是行處理模式,每讀取一行便讀取到剝離體中。下來(lái)我們來(lái)看看 awk 命令的格式:awk -Fs 'BEGIN{ } /pattern/ {action} END{ }' input-file ;-F 是指定分隔符。
我們看到以 , 結(jié)尾的,打印出三個(gè)段。
下面我們來(lái)看看 awk 中的內(nèi)置變量:
a> awk 分隔符 FS:
awk 'BEGIN { FS=","; \
print "-------------\nName\tTitle\n-------------" } \
{ print $2,"\t",$3; } \
END {print "-------------"}' employee.txt
我們以 \t 的格式打印出 Name 和 Title。
b> 指定多個(gè)分隔符,格式:awk 'BEGIN {FS="[,:%]"} {action}' input-file
我們看到我們以第 2 段和第 3 段的格式輸出信息。
c> 輸出分隔符 OFS,格式:awk -F ',' '{print $2, ":", $3}' employee.txt 等同于 awk -F ',' 'BEGIN { OFS=":" } { print $2, $3 }' employee.txt
d> 指定分隔符并換行 RS,指定分割字符,將一行分成多行。
輸入示例如下
e> 輸出分隔符 ORS
下來(lái)我們來(lái)看看AWK 中的 print 和 printf,那么它們有何區(qū)別呢?在 print 中不需要加引號(hào),字符串需要加引號(hào)。示例:date | awk '{print Month: " $2 "\nYear:",$1} ' ;printf 與 C 語(yǔ)言基本一致,轉(zhuǎn)移字符:- %c 字符、- %s 字符串、- %d 十進(jìn)制整數(shù)、- %f 浮點(diǎn)型
我們看到 print 和 printf 的區(qū)別,僅僅只是需要加引號(hào)的區(qū)別,printf 和 C 語(yǔ)言中的打印方式是一樣的。我們來(lái)看看一個(gè) awk 中的內(nèi)置變量 OFMT,它的作用是干什么嘞?它是控制輸出的,示例:date | awk '{OFMT="%.2f"; print 1.3456, 3.45}'
我們接下來(lái)看看幾個(gè)實(shí)例應(yīng)用:
1、將以下字符串以:分隔,分成多行
101,John Doe:102,Jason Smith:103,Raj Reddy:104,Anand Ram:105,Jane Miller
2、windows 與 Linux 文件格式轉(zhuǎn)換
命令:awk 'BEGIN{RS="\n";ORS="\r\n"} {print $0}' README.txt > README.WIN
我們看到在 Windows 下打開(kāi) README.txt 格式是不對(duì)的,都在一行。但是經(jīng)過(guò) awk 命令的轉(zhuǎn)換后,它就符合了 Windows 下的文本格式,將 Linux 下的換行符 \r\n 轉(zhuǎn)換成 Windows 下的 \n 換行符的格式。下來(lái)我們?cè)賮?lái)看看 awk 中的內(nèi)置變量,掌握更多的內(nèi)置變量將有利于我們更高效的進(jìn)行開(kāi)發(fā)。還是將以下內(nèi)容放入我們的 employee.tx 文本中
101,John Doe,CEO 102,Jason Smith,IT Manager 103,Raj Reddy,Sysadmin 104,Anand Ram,Developer 105,Jane Miller,Sales Manager
我們來(lái)看看一個(gè)內(nèi)置變量 NR,它的作用是記錄處理的行號(hào)。示例:awk '/Jason/ { print NR, $0}' employee.txt
那么我們多復(fù)制幾個(gè)文本呢,看看結(jié)果是怎樣的
我們看到記錄到的行號(hào)是 2 7 12,那么這是為什么呢?NR 變量不會(huì)重置計(jì)數(shù)器,這便是我們要強(qiáng)調(diào)的一個(gè)注意事項(xiàng)。
FILENAME 內(nèi)置變量,它的作用是同時(shí)處理多個(gè)文件時(shí),用來(lái)標(biāo)志當(dāng)前處理的文件名 。注意:1) 處理文本時(shí)顯示文件;2) 從管道輸入流接收內(nèi)容時(shí)顯示 "-"
我們看到在輸出時(shí)加字符串必要要用雙引號(hào)括起來(lái),同時(shí)我們也可用 NR 來(lái)進(jìn)行行號(hào)的輸出。在管道后接收內(nèi)容時(shí)會(huì)顯示 "-"。
接下來(lái)我們來(lái)看看 FNR 內(nèi)置變量,它跟NR 內(nèi)置變量類似,但會(huì)重置計(jì)數(shù)器。
我們看到三個(gè)打印的都是第 2 行。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。