linux命令_awk

来源:https://www.cnblogs.com/ivanlee717/archive/2022/05/20/16292056.html
-Advertisement-
Play Games

awk linux命令_sed AWK 是一種處理文本文件的語言,是一個強大的文本分析工具。 之所以叫 AWK 是因為其取了三位創始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字元。 學習具體使用前,先來看下 aw ...


awk

linux命令_sed

AWK 是一種處理文本文件的語言,是一個強大的文本分析工具。

之所以叫 AWK 是因為其取了三位創始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字元。

學習具體使用前,先來看下 awk 能幹些什麼事情:

1. 能夠將給定的文本內容,按照我們期望的格式輸出顯示,列印成報表。

2. 分析處理系統日誌,快速地分析挖掘我們關心的數據,並生成統計信息;

3. 方便地用來統計數據,比如網站的訪問量,訪問的 IP 量等;

4. 通過各種工具的組合,快速地彙總分析系統的運行信息,讓你對系統的運行瞭如指掌;

5. 強大的腳本語言表達能力,支持迴圈、條件、數組等語法,助你分析更加複雜的數據;

……

當然 awk 不僅能做這些事情,當你將它的用法融匯貫通時,可以隨心所欲的按照你的意願,來進行高效的數據分析和統計。

不過我們需要知道,awk 不是萬能的,它比較擅長處理格式化的文本,比如 日誌csv 格式數據等;

awk和sed的區別

sed的核心是正則,對於sed, 基本的兩個概念是匹配和行為。

  1. 匹配是通過區域選擇加上正則表達式實現,比如“3到6行以This開頭的”
  2. 行為是增刪改查。可以在某個位置新增或刪除一行,可以通過正則表達式進行變數替換,可以顯示滿足某些條件的行。配合shell的批處理就會很強大, 比如我想把所有文件的開頭添加一個註釋,比如我想把所有文件的某一個變數進行替換,比如我想把所有文件滿足某些條件的行進行合併和拆分。
  3. 同時,sed提供了一個保持空間(hold space)可以實現逆序輸出等操作。
  4. 另外,sed的用法非常靈活,你可以將匹配和行為進行不同的嵌套,舉個複雜的例子“將第某行到某行之間的滿足A條件的裡面滿足B條件的行進行C操作和D操作並且將E條件的行進行F操作”這樣的靈活組合方式怕是也只有sed了

awk,經常用於格式化輸出,也就是將數據按照我們想要的方式來顯示,並且可以做一些基本的統計工作。

  1. 它的運作模式是“預處理+逐行處理+最終處理”。一般我們只用“逐行處理”比如對於滿足條件的某些行,我們列印某某列。通過指定分隔符,我們很容易的對列進行操作。
  2. 預處理來定義變數,逐行處理來修改變數,最終處理來列印變數。

awk的使用

awk 'BEGIN{ commands } /pattern/ {commands} END{ commands }'

1、BEGIN{ commands }開始塊就是在程式啟動的時候執行的代碼部分,並且它在整個過程中只執行一次。一般情況下,我們可以在開始塊中初始化一些變數。
註意:開始塊部分是可選的,你的程式可以沒有開始塊部分。
2、/pattern/ {commands}pattern 部分匹配該行內容成功後,才會執行commands 的內容。
3 END{ commands }結束塊是在程式結束時執行的代碼。
註意:結束塊部分也是可選的

awk的語法

awk [選項參數] 'script' var=value file(s)
或
awk [選項參數] -f scriptfile var=value file(s)
選項
-F fs or --field-separator fs 指定輸入文件折分隔符,fs是一個字元串或者是一個正則表達式,如-F:。
-v var=value or --asign var=value -va=1賦值一個用戶定義變數a的值為1
-f -f scripfile,從腳本文件中讀取awk命令
-mf nnn and -mr nnn 對nnn值設置內在限制,-mf選項限制分配給nnn的最大塊數目;-mr選項限制記錄的最大數目。這兩個功能是Bell實驗室版awk的擴展功能,在標準awk中不適用。
-W compact or --compat, -W traditional or --traditional 在相容模式下運行awk。所以gawk的行為和標準的awk完全一樣,所有的awk擴展都被忽略。
-W copyleft or --copyleft, -W copyright or --copyright 列印簡短的版權信息。
-W help or --help, -W usage or --usage 列印全部awk選項和每個選項的簡短說明。
-W lint or --lint 列印不能向傳統unix平臺移植的結構的警告。
-W source program-text or --source program-text 使用program-text作為源代碼,可與-f命令混用。

awk常用變數

變數 描述
$n $1當前記錄的第1個欄位的內容和sed中的$1不同,sed表示第一個參數
$0 整行數據的內容
FS 欄位分隔符(預設是空格)
OFS 輸出欄位的分隔符(預設是空格)
RS 行分隔符(預設以\n作為一行的結尾),單行分割成多行用到
NR 行號,從1開始,多文件時候也是連續接著計數
FNR 各文件分別計數的行號,多文件的時候會和NR不同,它會重新計數
NF 一行中欄位數量,最後一個欄位內容可以用$NF取出
ARGC 命令行參數的數目
ARGV 包含命令行參數的數組,第一個參數是命令awk

awk格式化

字元 功能
%d 十進位有整數符號
%u 十進位無整數符號
%f 浮點數
%s 字元串
%c 單個字元
%p 指針的值
%e 指數形式的浮點數
%x,%X 無符號以十六進位表示的整數
%0 無符號以八進位表示的整數
%g 自動選擇合適的表示法
\n 換行
\f 清屏並換頁
\t Tab符號
\xhh 表示一個ASCII碼用16進表示,其中hh是1到2個16進位數
\r 回車

示例

awk '{[pattern] action}' {filenames}   # 行匹配語句 awk '' 只能用單引號
awk [選項] '匹配規則和處理規則 ' [處理文本路徑]
標準輸出 | awk [選項] '匹配規則和處理規則 '
BEGIN{} : BEGIN是在awk處理文本之前運行
// : 使用的匹配規則
{} :迴圈(每次只處理一行數據)
END{} :當所有的處理全部執行完畢之後,執行END中的相關操作
  • awk -F: '{print $1}' /etc/passwd
    
    [root@localhost Honeypot-deploy-steps] awk -F: '{print $1}' /etc/passwd
    root
    bin
    daemon
    adm
    lp
    sync
    shutdown
    halt
    mail
    operator
    games
    ftp
    nobody
    systemd-network
    dbus
    polkitd
    sshd
    postfix
    tss
    postgres
    
  • awk -F: '$3>50{print $0}' /etc/passwd 輸出uid大於50的行

    [root@localhost] awk -F: '$3>50{print $0}' /etc/passwd
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    

    -F[]:指明輸入欄位分隔符; 不使用-F時預設以空格為欄位分隔符

    image-20220520115507876

    [root@localhost Honeypot-deploy-steps] awk '{print $1,$3}'  /etc/passwd
    root:x:0:0:root:/root:/bin/bash 
    bin:x:1:1:bin:/bin:/sbin/nologin 
    daemon:x:2:2:daemon:/sbin:/sbin/nologin 
    adm:x:3:4:adm:/var/adm:/sbin/nologin 
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 
    sync:x:5:0:sync:/sbin:/bin/sync 
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 
    halt:x:7:0:halt:/sbin:/sbin/halt 
    ....
    
  • FS

    [root@localhost Honeypot-deploy-steps] awk  -v FS=":" '{print $1,$3}'  /etc/passwd     輸入時的欄位分隔符
    root 0   
    bin 1
    daemon 2
    adm 3
    lp 4
    sync 5
    shutdown 6
    halt 7
    mail 8
    operator 11
    games 12
    ftp 14
    nobody 99
    systemd-network 192
    
  • RS awk -v RS=" " '{print $0}' /etc/passwd

  • NF

    [root@localhost Honeypot-deploy-steps] awk '{print NF}' /etc/passwd  輸出欄位個數
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    2
    1
    3
    3
    3
    2
    1
    11
    2
    
    [root@localhost Honeypot-deploy-steps] awk '{print $NF}' /etc/passwd  輸出最後一個欄位
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    Management:/:/sbin/nologin
    bus:/:/sbin/nologin
    polkitd:/:/sbin/nologin
    SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    daemon:/dev/null:/sbin/nologin
    Server:/var/lib/pgsql:/bin/bash
    
    [root@localhost Honeypot-deploy-steps] awk -F: 'NR > 7 && NR < 14{print NR,$0}' /etc/passwd       輸出第7行之後的內容且第14行之前的內容輸出出來,包含行號
    8 halt:x:7:0:halt:/sbin:/sbin/halt
    9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10 operator:x:11:0:operator:/root:/sbin/nologin
    11 games:x:12:100:games:/usr/games:/sbin/nologin
    12 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13 nobody:x:99:99:Nobody:/:/sbin/nologin
    
    
  • FNR:行數,各文件分別計數

    [root@localhost Honeypot-deploy-steps] awk '{print FNR}'  /etc/passwd /etc/issue
    1
    2
    3
    4
    5
    6
    7
    8
    9
    1
    2
    3
    [root@localhost Honeypot-deploy-steps]# awk '{print FNR,$0}' /etc/passwd /etc/issue
    1 root:x:0:0:root:/root:/bin/bash
    2 bin:x:1:1:bin:/bin:/sbin/nologin
    3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
    4 adm:x:3:4:adm:/var/adm:/sbin/nologin
    5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    6 sync:x:5:0:sync:/sbin:/bin/sync
    7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    8 halt:x:7:0:halt:/sbin:/sbin/halt
    9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    1 \S
    2 Kernel \r on an \m
    3 
    
  • FILENAME:當前文件名;

    [root@localhost Honeypot-deploy-steps] awk '{print FILENAME,$0}' /etc/passwd /etc/issue
    /etc/passwd root:x:0:0:root:/root:/bin/bash
    /etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin
    /etc/passwd daemon:x:2:2:daemon:/sbin:/sbin/nologin
    /etc/passwd adm:x:3:4:adm:/var/adm:/sbin/nologin
    /etc/passwd lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    /etc/passwd sync:x:5:0:sync:/sbin:/bin/sync
    /etc/passwd shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    /etc/passwd halt:x:7:0:halt:/sbin:/sbin/halt
    /etc/passwd mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    /etc/passwd operator:x:11:0:operator:/root:/sbin/nologin
    /etc/passwd games:x:12:100:games:/usr/games:/sbin/nologin
    /etc/passwd ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    /etc/passwd nobody:x:99:99:Nobody:/:/sbin/nologin
    /etc/passwd systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    /etc/passwd dbus:x:81:81:System message bus:/:/sbin/nologin
    /etc/passwd polkitd:x:999:998:User for polkitd:/:/sbin/nologin
    /etc/passwd sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    /etc/passwd postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    /etc/passwd tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    /etc/passwd postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
    /etc/issue \S
    /etc/issue Kernel \r on an \m
    /etc/issue 
    
  • -v

    [root@localhost Honeypot-deploy-steps] awk '{file="passwd";print file,$1}' /etc/passwd 兩種方式是一樣的
    passwd root:x:0:0:root:/root:/bin/bash
    passwd bin:x:1:1:bin:/bin:/sbin/nologin
    passwd daemon:x:2:2:daemon:/sbin:/sbin/nologin
    passwd adm:x:3:4:adm:/var/adm:/sbin/nologin
    passwd lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    
    [root@localhost Honeypot-deploy-steps] awk -v file="passwd" '{print file,$1}' /etc/passwd
    passwd root:x:0:0:root:/root:/bin/bash
    passwd bin:x:1:1:bin:/bin:/sbin/nologin
    passwd daemon:x:2:2:daemon:/sbin:/sbin/nologin
    passwd adm:x:3:4:adm:/var/adm:/sbin/nologin
    passwd lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    
    
  • 模式匹配. 讓$1匹配模式/root/

    [root@localhost Honeypot-deploy-steps] awk -F: '$1~/root/{print $7}' /etc/passwd
    /bin/bash
    
  • 條件表達式

    [root@localhost Honeypot-deploy-steps] awk -F: '{$3>=500?usertype="common user":usertype="sysuser or admin";printf "%20s:%-s\n",$1,usertype}' /etc/passwd
                    root:sysuser or admin
                     bin:sysuser or admin
                  daemon:sysuser or admin
                     adm:sysuser or admin
                      lp:sysuser or admin
                    sync:sysuser or admin
                shutdown:sysuser or admin
                    halt:sysuser or admin
                    mail:sysuser or admin
                operator:sysuser or admin
                   games:sysuser or admin
                     ftp:sysuser or admin
                  nobody:sysuser or admin
         systemd-network:sysuser or admin
                    dbus:sysuser or admin
                 polkitd:common user
                    sshd:sysuser or admin
                 postfix:sysuser or admin
                     tss:sysuser or admin
                postgres:sysuser or admin
    
  • 通過管道符操作

    [root@localhost Honeypot-deploy-steps] cat -n /etc/passwd | awk -F: '{print $1}'
         1	root
         2	bin
         3	daemon
         4	adm
         5	lp
         6	sync
         7	shutdown
         8	halt
         9	mail
        10	operator
        11	games
        12	ftp
        13	nobody
        14	systemd-network
        15	dbus
        16	polkitd
        17	sshd
        18	postfix
        19	tss
        20	postgres
    
    • 格式化輸出

      統計第一列字元的最大個數

      [root@localhost Honeypot-deploy-steps] awk -F: 'BEGIN{num=0}{if(length($1)>num){num=length($1)}}END{print num}' /etc/passwd
      15
      

      要求輸出第1列和最後一列,排版整齊

      [root@localhost Honeypot-deploy-steps] awk -F: '{printf "%-15s %s\n",$1,$NF}' /etc/passwd
      root            /bin/bash
      bin             /sbin/nologin
      daemon          /sbin/nologin
      adm             /sbin/nologin
      lp              /sbin/nologin
      

      在前7行前加7, 前14行前加14,其他原樣輸出

      image-20220520134059672

      參考資料

本文來自博客園,作者:ivanlee717,轉載請註明原文鏈接:https://www.cnblogs.com/ivanlee717/p/16292056.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • #Redis簡介 Redis(Remote Dictionary Server)是完全開源的、遵守BSD協議的、高性能的Key-Value資料庫。 Redis與其他Key-Value緩存產品有一下三個特點: Redis支持數據的持久化,可以將記憶體中的數據保存在磁碟中,重啟的時候可以再次載入進行使用。 ...
  • 前言 很多人一談到 MSBuild,腦子裡就會出現 “XML”、“只能用 VS 的屬性框圖形界面操作”、“可定製性和擴展性差” 和 “性能低” 等印象,但實際上這些除了 “XML” 之外完全都是刻板印象:這些人用著 Visual Studio 提供的圖形界面,就完全不願意花個幾分鐘時間翻翻文檔去理解 ...
  • 在Word中添加著重號,即強調符號,可以在選中字元後,滑鼠右鍵點擊,選擇“字體”,在視窗中可直接選擇“著重號”添加到文字,用以對重要文字內容起加強提醒的目的,如下圖: 通過C#,我們可以查找到需要添加著重號的字元串,然後通過字元串格式的屬性值來添加符號。下麵,將對此做詳細介紹。 【引入dll】 方法 ...
  • 新創建的 asp.net mvc web api 項目後直接部署到 IIS 中,然後通過另外功能變數名稱 Ajax 跨功能變數名稱調用一個POST介面,並且請求頭headers中增加 Content-Type:application/json,根據阮一峰的文章《跨域資源共用 CORS 詳解》可知道這個非簡單請求會先... ...
  • tmux在連接遠程伺服器做實驗時很有幫助,可以為每一個項目設置一個Session,在Session中設置不同的Window同時跑多個實驗,Window本身還可以分割為多個Pane,在一個視野內利用多個Pane可以更方便地地做對比實驗,或者一邊實驗同時能監視系統的顯存占用,進程信息等狀態。 tmux採 ...
  • 1、修改主機名 方法一# hostname 主機名 ##臨時修改主機名 方法二#vim /etc/hostname ##修改hostname文件重啟系統生效 將localhost.localdomain改為自定的主機名 2、設置sudo給用戶 # vim /etc/sudoers ##編輯sudoe ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 AutoWare.auto 安裝實踐 1. 相關程式版本說明 ubuntu版本:20.04 ADE:4.4.0 Autoware.auto版本(基於ROS2):autoware.auto foxy, ros foxy 2. Docker安裝 以下 ...
  • 引言 最近收到領導通知,甲方需要將原來的伺服器遷移到新的伺服器。 原來的伺服器上安裝了很多的服務,每次重啟之後總是有很多的問題需要人工大量的進行干預。 這次遷移的還是Windows伺服器於是這次打算使用Docker給以後減少點麻煩。 有的項目必須跑在Windows環境中,吐槽。 準備工作 操作系統: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...