第2.1節:AWK腳本結構

1 第2.1節:AWK腳本結構

1.1 第1個awk腳本

??假設有如下的數據待處理,需要將第2列提取出來:

#, 名稱,           大小,      類型, 修改,              屬性
1, COMMIT_EDITMSG, 331 bytes, 文件, 24/09/16 08:42:19, -a-----
2, config,         130 bytes, 文件, 24/09/14 11:52:27, -a-----
3, description,    73 bytes,  文件, 24/09/14 11:52:27, -a-----
4, HEAD,           23 bytes,  文件, 24/09/14 11:52:27, -a-----
5, index,          145 bytes, 文件, 24/09/16 08:42:19, -a-----
6, tgitchangelist, 0 bytes,   文件, 24/09/16 08:42:21, -a-----

1.1.1 命令行方式

awk示例:

awk '{print $2}' data.txt

awk命令后的單引號內容表示awk語句。

輸出:

名稱,
COMMIT_EDITMSG,
config,
description,
HEAD,
index,
tgitchangelist,

1.1.2 腳本方式

??將下面的代碼復制到文件get_col_2.awk

#!/bin/awk -f
{print $2
}

注意:第1行注釋很重要,-f表示該腳本可以接收文件
執行命令get_col_2.awk data.txt
輸出:

$ ./get_col_2.awk data.txt
名稱,
COMMIT_EDITMSG,
config,
description,
HEAD,
index,
tgitchangelist,
  • 發現什么沒有? 不論是命令方式,還是腳本文件方式,awk代碼都用{}包圍。

1.2 模式 - 動作(Pattern - Action)

??在 AWK 腳本中,模式 - 動作是核心結構。模式用于篩選輸入數據中的特定行,動作則定義了對這些篩選出來的行要執行的操作。
示例代碼:

#!/bin/awk -f
$1 % 2 == 0 {print $1,$2
}$1 % 3 == 0 {print $1,$2
}

??上述示例代碼中有兩個模式和動作,

  • 第1個模式:第1列的數字整除2,即$1 % 2 == 0,則執行后面{print $1,$2}中的動作,這里是打印第1、2列。
  • 第2個模式:第1列的數字整除3,即$1 % 3 == 0,則執行后面的{print $1,$2}中的動作,這里是打印1、2列,當然,可以做別的事。
    輸出:
$ ./get_col_2.awk data.txt
#, 名稱,
#, 名稱,
2, config,
3, description,
4, HEAD,
6, tgitchangelist,
6, tgitchangelist,

注:由于有多個模式-動作塊,所以會發現有些數據打印了多次!

🕮說明
??awk的處理邏輯是讀取每1行文本,將這行文本丟到每個模式-動作進行處理,如果匹配了模式,則執行該模式對應的動作。

??模式可以是關系表達式(如$1 > 100篩選出第一列數據大于 100 的行)、正則表達式(如/error/篩選出包含 “error” 字符串的行)等。動作部分則能包含各種 AWK 語句,像變量賦值、數學運算、調用函數等。通過靈活組合模式與動作,實現對數據的精準處理。

1.3 BEGIN 和 END 塊

BEGIN 塊在 AWK 讀取輸入數據之前執行,常用于初始化變量、設置環境等操作。例如,在對系統及進程的 CPU、內存進行自動監控分析時,可能需要初始化一些統計變量,記錄總的 CPU 使用時長、內存使用峰值等,就可以在 BEGIN 塊中完成:

BEGIN {    totalCpuTime = 0    maxMemoryUsage = 0}

END 塊在所有輸入數據處理完畢后執行,通常用于輸出最終結果、清理資源等。繼續上面的例子,在分析完所有數據后,我們想輸出總的 CPU 使用時長和內存使用峰值的統計結果,就可在 END 塊中實現:

END {    print "Total CPU Time:", totalCpuTime    print "Max Memory Usage:", maxMemoryUsage}

通過 BEGIN 和 END 塊,能讓 AWK 腳本在數據處理的前后階段完成一些準備和收尾工作,與中間的模式 - 動作結構協同,構建出完整、高效的數據處理流程,這也是 AWK 在數據處理領域強大功能的體現。

1.4 總結:

??一個完整的awk腳本包含以下幾部分

  • 注釋:該注釋是有意義的,可以告訴腳本引擎該腳本的執行方式
  • BEGIN塊:在1行數據都沒有處理的時候,進行一些初始化設置,也可以定義一些函數
  • 模式-動作塊:數據處理代碼,可以有多個模式-動作塊,對同一行數據進行多次處理
  • END塊:數據全部處理結束后執行的語句

作者聲明:本文用于記錄和分享作者的學習心得,可能有部分文字或示例來自AI平臺,如:豆包、DeepSeek(硅基流動)(注冊鏈接)等,由于本人水平有限,難免存在表達錯誤,歡迎留言交流和指教!
Copyright ? 2022~2025 All rights reserved.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898559.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898559.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898559.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Win NAS 分享功能:精準、安全的內容共享

WinNAS 不僅是一款強大的 NAS服務,還通過耘想存儲 APP 提供了便捷的內容分享功能。無論是與個人、群聊、朋友圈還是公眾分享文件,WinNAS 都配備了嚴格的權限管理機制,確保您的數據安全且精準地傳遞給目標對象。以下是 WinNAS 分享功能的詳細介…

C# 項目06-計算程序運行時間

實現需求 記錄程序運行時間,當程序退出后,保存程序運行時間,等下次程序再次啟動時,繼續記錄運行時間 運行環境 Visual Studio 2022 知識點 TimeSpan 表示時間間隔。兩個日期之間的差異的 TimeSpan 對象 TimeSpan P_TimeSpa…

網絡華為HCIA+HCIP NFV

目錄 NFV關鍵技術:虛擬化 NFV關鍵技術:云化 NFV架構 NFV標準架構 ?編輯 NFV架構功能模塊 NFV架構接口 NFV關鍵技術:虛擬化 在NFV的道路上,虛擬化是基礎,云化是關鍵。傳統電信網絡中,各個網元都是…

SpringBoot實現異步調用的方法

在Java中使用Spring Boot實現異步請求和異步調用是一個常見的需求,可以提高應用程序的性能和響應能力。以下是實現這兩種異步操作的基本方法: 一、異步請求(Asynchronous Request) 異步請求允許客戶端發送請求后立即返回&#x…

xwiki自定義認證實現單點登錄

xwiki支持自定義認證 繼承XWikiAuthServiceImpl類后將類配置到WEB-INFO下xwiki.cfg的xwiki.authentication.authclass屬性上開啟自定義認證。 官方文檔:https://www.xwiki.org/xwiki/bin/view/Documentation/AdminGuide/Authentication/ 官方自定義認證的示例&#…

使用vite新建vue3項目 以及elementui的使用 vite組件問題

項目創建 在創建項目之前我們應該在終端中輸入 node -v 和 npm -v 只有它們都能正常查看版本號才說明我們之前是已經安裝完成的。 接下來我們在合適的目錄下輸入npm create vitelatest 它會要求你輸入項目的名稱,這個名稱和我們之前通過cil創建的命名規則一樣。…

音頻錄制小妙招-自制工具-借助瀏覽器錄一段單聲道16000采樣率wav格式音頻

先看效果 1、打開頁面 2、點擊開始錄音,彈出權限提示,點擊“僅這次訪問時允許” 3、錄完后,點擊停止 4、文件自動下載到默認目錄 上代碼 js 部分 document.addEventListener(DOMContentLoaded, () > {const startBtn document.getEleme…

Mysql-經典實戰案例(10):如何用PT-Archiver完成大表的自動歸檔

真實痛點:電商訂單表存儲優化場景 現狀分析 某電商平臺訂單表(order_info)每月新增500萬條記錄 主庫:高頻讀寫,SSD存儲(空間告急)歷史庫:HDD存儲,只讀查詢 優化目標 …

CUDA編程面試高頻30題

1. 什么是CUDA?它與GPU的關系是什么? 答: CUDA(Compute Unified Device Architecture)是由NVIDIA開發的一種并行計算平臺和應用程序接口模型。它允許開發者利用NVIDIA GPU進行通用計算任務,而不僅僅是圖形渲染。CUDA提…

數學建模 繪圖 圖表 可視化(3)

文章目錄 前言二維散點圖系列坐標圖數據分布特征,Q-Q、P-P圖分類圖一般的曲線圖峰巒圖總結參考資料 前言 承接上期 數學建模 繪圖 圖表 可視化(1)的總體描述,這期我們繼續跟隨《Python 數據可視化之美 專業圖表繪制指南》步伐來學…

【數據結構】棧(Stack)、隊列(Queue)、雙端隊列(Deque) —— 有碼有圖有真相

目錄 棧和隊列 1. 棧(Stack) 1.1 概念 1.2 棧的使用(原始方法) 1.3 棧的模擬實現 【小結】 2. 棧的應用場景 1、改變元素的序列 2、將遞歸轉化為循環 3、逆波蘭表達式求值 4、括號匹配 5、出棧入棧次序匹配 6、最小棧…

【強化學習】Reward Model(獎勵模型)詳細介紹

📢本篇文章是博主強化學習(RL)領域學習時,用于個人學習、研究或者欣賞使用,并基于博主對相關等領域的一些理解而記錄的學習摘錄和筆記,若有不當和侵權之處,指出后將會立即改正,還望諒…

國家雪亮工程政策護航,互聯網監控管理平臺鑄就安全防線

在當今社會,公共安全是國家發展的重要基石,也是人民安居樂業的基本保障。為了打造更高水平的平安中國,國家推出了意義深遠的雪亮工程,并出臺了一系列相關政策,為公共安全事業保駕護航。而互聯網監控管理平臺作為雪亮工…

藍橋杯 第十天 2019國賽第4題 矩陣計數

最后一個用例超時了,還是記錄一下 import java.util.Scanner;public class Main {static int visited[][];static int count 0;static int n,m;public static void main(String[]args) {Scanner scan new Scanner(System.in);n scan.nextInt();//2m scan.nextIn…

coding ability 展開第五幕(二分查找算法)超詳細!!!!

. . 文章目錄 前言二分查找搜索插入的位置思路 x的平方根思路 山脈數組的峰頂索引思路 尋找旋轉排序數組中的最小值思路 總結 前言 本專欄上篇博客已經把滑動指針收尾啦 現在還是想到核心——一段連續的區間,有時候加上哈希表用起來很爽 今天我們來學習新的算法知識…

BEVFormer報錯(預測場景與真值場景的sample_token不匹配)

在運行test.py時報錯: BEVFormer/projects/mmdet3d_plugin/datasets/nuscnes_eval.py: init()函數報錯 assert set(self.pred_boxes.sample_tokens) set(self.gt_boxes.sample_tokens), \"Samples in split doesnt match samples in predictions…

網絡安全威脅與防護措施(下)

8. 惡意軟件(Malware) **惡意軟件(Malware,Malicious Software)**是指旨在通過破壞、破壞或未經授權訪問計算機系統、網絡或設備的程序或代碼。惡意軟件通常用于竊取敏感信息、破壞系統、竊取資源、干擾正常操作&…

基于springboot的母嬰商城系統(018)

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術,讓傳統數據信息的管理升級為軟件存儲,歸納,集中處理數據信息的管理方式。本母嬰商城系統就是在這樣的大環境下誕生,其可以幫助管理者在短時間內處理完畢龐大的數據信息&am…

shell 腳本搭建apache

#!/bin/bash # Set Apache version to install ## author: yuan# 檢查外網連接 echo "檢查外網連接..." ping www.baidu.com -c 3 > /dev/null 2>&1 if [ $? -eq 0 ]; thenecho "外網通訊良好!" elseecho "網絡連接失敗&#x…

使用OBS進行webRTC推流參考

參考騰訊云官方文檔: 云直播 OBS WebRTC 推流_騰訊云 說明非常詳細,分為通過WHIP和OBS插件的形式進行推流。 注意:通過OBS插件的形式進行推流需要使用較低的版本,文檔里有說明,需要仔細閱讀。