Linux|如何在 awk 中使用流控制語句

引言

當您從 Awk 系列一開始回顧我們迄今為止介紹的所有 Awk 示例時,您會注意到各個示例中的所有命令都是按順序執行的,即一個接一個。但在某些情況下,我們可能希望根據某些條件運行一些文本過濾操作,這就是流程控制語句的方法。

alt

Awk 編程中有各種流程控制語句,包括:

  • if-else 語句
  • 聲明
  • while 語句
  • do while 語句
  • 中斷語句
  • 繼續聲明
  • 下一個聲明
  • 下一個文件語句
  • 退出聲明

然而,對于本系列的范圍,我們將闡述:if-else、for、while 和 do while 語句。

1. if-else 語句

if 語句的預期語法與 shell if 語句的語法類似:

if??(condition1)?{
?????actions1
}
else?{
??????actions2
}

在上述語法中,condition1和condition2是Awk表達式,actions1和actions2是滿足各自條件時執行的Awk命令。

當條件1滿足時,即為真,則執行actions1并退出if語句,否則執行actions2。

if 語句也可以擴展為 if-else_if-else 語句,如下所示:

if?(condition1){
?????actions1
}
else?if?(conditions2){
??????actions2
}
else{
?????actions3
}

對于上面的形式,如果條件 1 為 true,則執行 actions1 并退出 if 語句,否則評估條件 2,如果為 true,則執行 actions2 并退出 if 語句。然而,當條件2為假時,則執行動作3并且退出if語句。

這是使用 if 語句的一個例子,我們有一個用戶列表及其年齡存儲在文件 users.txt 中。

我們想要打印一條聲明,指明用戶的姓名以及用戶的年齡是小于還是大于 25 歲。

alt

我們可以編寫一個簡短的shell腳本來執行上面的工作,以下是腳本的內容:

#!/bin/bash
awk?'?{?
????????if?(?$3?<=?25?){
???????????print?"User",$1,$2,"is?less?than?25?years?old."?;
????????}
????????else?{
???????????print?"User",$1,$2,"is?more?than?25?years?old"?;?
}
}'
????~/users.txt

然后保存文件并退出,使腳本可執行并運行,如下所示:

$?chmod?+x?test.sh
$?./test.sh
  • 輸出結果
alt

2. for 語句

如果您想在循環中執行某些 Awk 命令,則 for 語句為您提供了一種合適的方法,其語法如下:

這里,該方法簡單地定義為使用計數器來控制循環執行,首先需要初始化計數器,然后根據測試條件運行它,如果為真,則執行操作,最后遞增計數器。當計數器不滿足條件時循環終止。

for?(?counter-initialization;?test-condition;?counter-increment?){
??????actions
}

以下 Awk 命令顯示了 for 語句的工作原理,我們要在其中打印數字 0-10:

$?awk?'BEGIN{?for(counter=0;counter<=10;counter++){?print?counter}?}'
  • 輸出結果
alt

3. while 語句

while 語句的常規語法如下:

while?(?condition?)?{
??????????actions
}

條件是一個 Awk 表達式,操作是條件為真時執行的 Awk 命令行。下面是一個腳本來說明如何使用 while 語句來打印數字 0-10:

#!/bin/bash
awk?'?BEGIN{?counter=0?;
?????????
????????while(counter<=10){
??????????????print?counter;
??????????????counter+=1?;
?????????????
}
}??

保存文件并使腳本可執行,然后運行它:

$?chmod?+x?test.sh
$?./test.sh
alt

4. do while 語句

它是上面 while 語句的修改,具有以下底層語法:

do?{
?????actions
}
?while?(condition)?

細微的差別在于,在 do while 下,Awk 命令在評估條件之前執行。使用上面 while 語句下的示例,我們可以通過更改 test.sh 腳本中的 Awk 命令來說明 do while 的用法,如下所示:

#!/bin/bash

awk?'?BEGIN{?counter=0?;??
????????do{
????????????print?counter;??
????????????counter+=1?;????
????????}
????????while?(counter<=10)???
}?

修改腳本后,保存文件并退出。然后使腳本可執行并按如下方式執行:

$?chmod?+x?test.sh
$?./test.sh

結果如上圖一致。

總結

Awk 系列的這一部分應該讓您清楚地了解如何根據特定條件控制 Awk 命令的執行。

本文由 mdnice 多平臺發布

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

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

相關文章

鯨尾識別獲獎方案總結

文章目錄 1st solution(classification)2nd place code, end to end whale Identification model3rd place solution with code: ArcFace4th Place Solution: SIFT Siamese5th solution blog post code -Siamese7th place Pure Magic thanks Radek solution: classification9…

QGIS DEM數據快速獲取

背景 Dem 是非常重要的數據&#xff0c;30 m 的精度也是最容易獲取的&#xff0c;目前有很多種方式可以獲取&#xff0c;比如地理空間數據云&#xff0c;今天介紹用 QGIS插件獲取。 這種方式的最大優勢是方便快捷。 插件下載與安裝 插件-管理并安裝插件-搜索下載 OpenTopogr…

linux:信號深入理解

文章目錄 1.信號的概念1.1基本概念1.2信號的處理基本概念1.3信號的發送與保存基本概念 2.信號的產生2.1信號產生的五種方式2.2信號遺留問題(core,temp等) 3.信號的保存3.1 信號阻塞3.2 信號特有類型 sigset_t3.3 信號集操作函數3.4 信號集操作函數的使用 4.信號的處理4.1 信號的…

C# Winform實現五子棋游戲(代完善)

實現了基本的玩法。 BoardController.cs using System;namespace GomokuGame {public class BoardController{private static BoardController instance;private readonly int[,] board;private const int boardSize 15;private BoardController(){board new int[boardSize…

uniapp(h5 app) 中 webview和h5通信

1 uniapph5 和h5頁面 通信 h5 window.parent.postMessage(message, *); uniapph5 onload中 window.addEventListener(message, function (e) { // 監聽 message 事件 //console.log(e.origin) console.log(收到的cocos游戲ID,e.data) …

Python實現天氣數據采集

Python實現天氣數據采集 一、需求介紹二、完整代碼一、需求介紹 本次天氣數據采集的需求是獲取每日的最高溫、最低溫、風力、風向、天氣狀況、AQI指數,如圖所示,完整代碼附后: 本次采集的目標網址是2345天氣網: 上圖的URL中,beijing是城市名稱的縮寫,54511即為城市代碼…

數據庫設計步驟and相關注意點

文章目錄 前言數據庫設計的主要步驟1.需求分析2.概念結構設計3.邏輯結構設計4.物理結構模型設計5.數據庫實施和維護給出一些題目理解一下吧~ 總結 前言 學無止境&#xff0c;筆勤不輟。最近筆者狀態不是特別好&#xff0c;一直忙于應付課程作業&#xff0c;于是一直沒有時間更…

科技引領未來:高速公路可視化

高速公路可視化監控系統利用實時視頻、傳感器數據和大數據分析&#xff0c;通過圖撲 HT 可視化展示交通流量、車速、事故和路況信息。交通管理人員可以實時監控、快速響應突發事件&#xff0c;并優化交通信號和指揮方案。這一系統不僅提高了道路安全性和車輛通行效率&#xff0…

vue3結合element-plus之如何優雅的使用表格

背景 表格組件的使用在后臺管理系統中是非常常見的,但是如果每次使用表格我們都去一次一次地從 element-plus 官網去 復制、粘貼和修改成自己想要的表格。 這樣一來也說得過去,但是如果我們靜下來細想不難發現,表格的使用都是大同小異的,每次都去復制粘貼,對于有很多表格…

vue3封裝ElementUI plus Dialog彈窗

因為ElementuiPlus的dialog彈框的初始樣式不太好看,而公司要求又要好看,本來是已經實現了,但是后來想想了發現封裝完dialog的其他功能也要,所以特此記錄一下 方案一 思路:封裝一個組件,將所有新增的參數引入el-dialog 參數中,實現參數共用 新建一個組件,將官網暴露的屬性全部引…

C++開源庫glog使用封裝--自定義日志輸出格式,設置日志保留時間

glog下載和編譯 glog開源地址 https://github.com/google/glog glog靜態庫編譯 cd /home/wangz/3rdParty/hldglog/glogmkdir out mkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX../out -DCMAKE_BUILD_TYPERelease -DBUILD_SHARED_LIBSOFF本文選擇的glo…

網關路由SpringCloudGateway、nacos配置管理(熱更新、動態路由)

文章目錄 前言一、網關路由二、SpringCloudGateway1. 路由過濾2. 網關登錄校驗2.1 鑒權2.2 網關過濾器2.3 登錄校驗2.3.1 JWT2.3.2 登錄校驗過濾器 3. 微服務從網關獲取用戶4. 微服務之間用戶信息傳遞 三、nacos配置管理問題引入3.1 配置共享3.1.1 在Nacos中添加共享配置3.1.2 …

【前端三劍客之HTML】詳解HTML

1. HTML(超文本標記語言) HTML意為超文本標記語言&#xff0c;其可以通過標簽把其他網頁/圖片/視頻等資源引入到當前網頁中&#xff0c;讓網頁最終呈現出來的效果超越了文本.HTML是一種標記語言&#xff0c;其是由一系列標簽組成的. 而且每個標簽都有特定的含義和確定的頁面顯…

Vue 3入門指南

title: Vue 3入門指南 date: 2024/5/23 19:37:34 updated: 2024/5/23 19:37:34 categories: 前端開發 tags: 框架對比環境搭建基礎語法組件開發響應式系統狀態管理路由配置 第1章&#xff1a;Vue 3簡介 1.1 Vue.js的歷史與發展 Vue.js由前谷歌工程師尤雨溪&#xff08;Eva…

Java分支結構詳解

Java分支結構詳解 前言一、if 語句基本語法表示一表示二表示三 代碼示例判定一個數字是奇數還是偶數判定一個數字是正數還是負數判定某一年份是否是閏年 注意要點懸垂 else 問題代碼風格問題分號問題 二、switch 語句基本語法代碼示例根據 day 的值輸出星期 注意事項break 不要…

深入了解 Pandas:對象的缺少值

目錄 前言 第一點&#xff1a;導入模塊 第二點 &#xff1a;發現對象的缺失值 第二點&#xff1a;剔除缺少值 第三點&#xff1a;填補缺失值 總結 前言 在數據處理中&#xff0c;經常會遇到數據中存在缺失值的情況。處理缺失值是數據清洗的一個重要環節&#xff0c;能夠確…

spring常用知識點

1、攔截器和過濾器區別 1. 原理不同&#xff1a; 攔截器是基于java的反射機制&#xff0c;而過濾器采用責任鏈模式是基于函數回調的。 2. 使用范圍不同&#xff1a; 過濾器Filter的使用依賴于Tomcat等容器&#xff0c;導致它只能在web程序中使用 攔截器是一個Sping組件&am…

abs(-2147483648) == 2147483648?

從數學意義上&#xff0c;這是對的。但是&#xff0c;就怕但是。 #include int main() {long long v;v abs(-2147483648);printf("%lld\n", v);return 0; } 輸出: -2147483648 我們從source code中一一解開. /* Return the absolute value of I. */ int abs (…

Mongodb介紹及springboot集成增刪改查

文章目錄 1. MongoDB相關概念1.1 業務應用場景1.2 MongoDB簡介1.3 體系結構1.4 數據模型1.5 MongoDB的特點 2. docker安裝mongodb3. springboot集成3.1 文件結構3.2 增刪改查3.2.1 增加insert3.2.2 保存save3.2.3 更新update3.2.4 查詢3.2.5 刪除 1. MongoDB相關概念 1.1 業務…

Docker-Android安卓模擬器本地部署并實現遠程開發測試

文章目錄 1. 虛擬化環境檢查2. Android 模擬器部署3. Ubuntu安裝Cpolar4. 配置公網地址5. 遠程訪問小結 6. 固定Cpolar公網地址7. 固定地址訪問 本文主要介紹如何在Ubuntu系統使用Docker部署docker-android安卓模擬器&#xff0c;并結合cpolar內網穿透工具實現公網遠程訪問本地…