日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux awk命令用途,Linux:“awk”命令的妙用

發(fā)布時間:2025/4/5 linux 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux awk命令用途,Linux:“awk”命令的妙用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

awk是一個強大的文本分析工具,簡單來說awk就是把文件逐行讀入,(空格,制表符)為默認分隔符將每行切片,切開的部分再進行各種分析處理。

0、基本用法

awk是一個強大的文本分析工具,簡單來說awk就是把文件逐行讀入,(空格,制表符)為默認分隔符將每行切片,切開的部分再進行各種分析處理

awk

格式如下

awk?[-F?field-separator]?'commands'?input-file(s)

[-F 分隔符]是可選的,因為awk使用空格,制表符作為缺省的字段分隔符,因此如果要瀏覽字段間有空格,制表符的文本,不必指定這個選項,但如果要瀏覽諸如/etc/passwd文件,此文件各字段以冒號作為分隔符,則必須指明-F選項

echo?"this?is?a?test"?|?awk?'{?print?$0?}'

##?輸出為

this?is?a?test

讀取用戶輸入的字符串發(fā)現|,代表有管道。|左右被理解為簡單

,即前一個(左邊)簡單命令的標準輸出指向后一個(右邊)標準命令的標準輸入

awk

會根據分隔符將行分成若干個字段,$0為整行,$1為第一個字段,$2 為第2個地段,依此類推…

為打印一個字段或所有字段,使用print命令。這是一個

awk

動作

echo?"this?is?a?test"?|?awk?'{?print?$1?}'

##?輸出為

this

echo?"this?is?a?test"?|?awk?'{?print?$1,?$2?}'

##?輸出為

this?is

/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

舉幾個簡單的小需求

1、只顯示/etc/passwd的賬戶

awk?-F?:?'{?print?$1?}'?/etc/passwd

##?輸出為

root

bin

daemon

adm

lp

2、顯示/etc/passwd的第1列和第7列,用逗號分隔顯示,所有行開始前添加列名start1,start7,最后一行添加,end1,end7

awk?-F?':'?'BEGIN?{print?"start1,start7"}?{print?$1?","?$7}?END?{print?"end1,end7"}'?/etc/passwd

##?輸出為

start1,start7

root,/bin/bash

bin,/sbin/nologin

daemon,/sbin/nologin

adm,/sbin/nologin

lp,/sbin/nologin

end1,end7

BEGIN語句在所有文本處理動作執(zhí)行之前被執(zhí)行,END在所有文本處理動作執(zhí)行之后被執(zhí)行

3、統計/etc/passwd文件中,每行的行號,每行的列數,對應的完整行內容

awk?-F?:?'{?print?NR?"??"?NF?"??"?$0?}'?/etc/passwd

##?輸出為

1????7???root:x:0:0:root:/root:/bin/bash

2????7???bin:x:1:1:bin:/bin:/sbin/nologin

3????7???daemon:x:2:2:daemon:/sbin:/sbin/nologin

4????7???adm:x:3:4:adm:/var/adm:/sbin/nologin

5????7???lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

1、支持內置變量

上面示例中

NR

,和

NF

其實就是

awk

的內置變量,一些內置變量如下

變量名?解釋

FILENAMEawk瀏覽的文件名

FS設置輸入字段分隔符,等價于命令行-F選項

NF?瀏覽記錄的字段個數

NR?已讀的記錄數

2、支持函數

輸出字符串的長度

awk?'BEGIN?{?print?length("this?is?a?text")?}'

## 輸出為

14

/etc/passwd

的用戶名變成大寫輸出

awk?-F?':'?'{?print?toupper($1)?}'?/etc/passwd

## 輸出為

ROOT

BIN

DAEMON

ADM

LP

常用函數如下

函數名?作用

toupper(s)返回s的大寫

tolower(s)?返回s的小寫

length(s)?返回s長度

substr(s,p)?返回字符串s中從p開始的后綴部分

3、支持條件操作,正則表達式匹配

顯示/etc/passwd中有daemon的行

awk -F ':' '$0 ~ /daemon/' /etc/passwd

## 輸出為

daemon:x:2:2:daemon:/sbin:/sbin/nologin

awk條件操作符

操作符描述

if?while?do/while?for?break?continue

輸出第一個字段的第一個字符大于d的行

awk?-F?':'?'{?if?($1?>?"d")?{?print?$1?}?else?{?print?"-"?}?}'?/etc/passwd

## 輸出為

root

-

daemon

-

lp

可以把流程控制語句放到一個

中,然后調用

執(zhí)行,如test.sh的內容如下

{

if?($1?>?"d")?{

print?$1

}?else?{

print?"-"

}

}

用如下方式執(zhí)行,效果一樣

awk?-F?':'?-f?test.sh?/etc/passwd

## 輸出為

root

-

daemon

-

lp

5、應用場景

小編用awk進行文本分析比較少,主要用來寫腳本

如一個weibo-interface-1.0.jar應用,啟動腳本如下

start.sh

nohup?java?-jar?weibo-interface-1.0.jar?>out?2>&1?&

關閉腳本如下,

kill.sh

kill?-9?`jps?-l?|?grep?'weibo-interface-1.0.jar'?|?awk?'{print?$1}'`

jps -l的輸出如下

70208?com.st.kmp.main.KmpService

31036?com.st.cis.main.BaiduAnalysisService

66813?weibo-interface-1.0.jar

還有就是關閉hadoop集群的所有DataNode節(jié)點(不知道hadoop的可以認為DataNode是一個集群應用),假如一個個機器jps,查看pid,kill。很麻煩,直接寫了一個腳本,依次ssh到各個節(jié)點,然后執(zhí)行如下命令即可

kill?`jps?|?grep?'DataNode'?|?awk?'{print?$1}'`

jps的輸出為

508?DataNode

31481?JournalNode

31973?NodeManager

總結

以上是生活随笔為你收集整理的linux awk命令用途,Linux:“awk”命令的妙用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。