国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

提升效率必備!學習 awk 命令,輕松搞定數據

開發
AWK是一款功能強大的數據處理工具,它能夠高效地處理復雜的文本文件和數據集。

在日常的工作中,無論是數據處理、日志分析,還是格式化輸出,AWK命令都是不可或缺的利器。AWK是一種強大的文本處理工具,能讓你輕松處理復雜的數據,提升工作效率。本文將為你介紹AWK的基本功能及一些實用場景,幫助你快速掌握這門工具。

awk選項

awk 命令的使用方式如下:

awk options program file

awk 可以采用以下選項:

  • -F:fs指定文件分隔符。
  • -f:文件指定包含 awk 腳本的文件。
  • -v:var=值聲明變量。

我們將了解如何使用awk處理文件和打印結果。

讀取AWK腳本

要定義awk腳本,請使用用單引號括起來的大括號,如下所示:

awk '{print "Welcome to awk command tutorial "}'

如果您鍵入任何內容,它將返回我們提供的相同歡迎字符串。如下圖所示:

要終止程序,請按Ctrl+D。看起來很棘手,不要驚慌,最好的還沒有到來。

使用變量

使用awk,可以處理文本文件。Awk為找到的每個數據字段分配一些變量:

  • $0:是輸出整行的內容。
  • $1:是輸出第一個字段。
  • $2:是輸出第二個字段。
  • $n:表示第n個字段。

在awk中,空格或制表符等空白字符是字段之間的默認分隔符。看看這個例子,看看awk是如何處理它的:

上面的示例打印了每行的第一個單詞。

有時某些文件中的分隔符不是空格或tab,而是其他內容。您可以使用–F選項指定它:

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

此命令將打印passwd文件中的第一個字段。我們使用冒號作為分隔符,因為passwd文件使用它。

使用多個命令

要運行多個命令,請用分號分隔它們,如下所示:

root@didiplus:~# echo "Hello Tom" | awk '{$2="Adam"; print $0}'
Hello Adam

第一個命令使 $2字段等于Adam。第二個命令打印整行。

從文件中讀取腳本

您可以在文件中鍵入awk腳本,并使用 -f 選項指定該文件。我們的文件包含以下腳本:

{print $1 " home at " $6}
 awk -F: -f testfile /etc/passwd

在這里,我們從 /etc/passwd打印用戶名和他的主路徑,當然分隔符是用大寫的-F指定的,即冒號。

你可以像這樣awk腳本文件:

{
text = $1 " home at " $6
print t

awk預處理

如果您需要為結果創建標題或表頭等。您可以使用BEGIN關鍵字來實現此目的。它在處理數據之前運行:

awk 'BEGIN {print "this Title"} {print $0}' myfile

執行上述代碼輸入如下圖的結果:

awk后處理

要在處理數據后運行腳本,請使用END關鍵字:

awk 'BEGIN {print "this Title"} {print $0} END {print "this footer"}' myfile

執行上述代碼輸出如下圖的結果:

這很有用,例如,您可以使用它來添加頁腳。讓我們將它們組合到一個腳本文件中:

BEGIN {
print "Users and thier corresponding home"
print " UserName \t HomePath"
print "___________ \t __________"
FS=":"
}
{
print $1 "  \t  " $6
}
END {
print "The end"

首先,使用BEGIN關鍵字創建頂部部分。然后我們定義FS并在末尾打印頁腳。

 awk -f myscript  /etc/passwd

內置變量

我們看到數據字段變量$1,$2,$3等用于提取數據字段,我們還處理字段分隔符FS。

但這些并不是唯一的變量,還有更多的內置變量。

下面列出了一些內置變量:

  • FIELDWIDTHS:指定字段寬度。
  • RS:指定記錄分隔符。
  • FS:指定字段分隔符。
  • OFS:輸出分隔符。
  • ORS:輸出分隔符。

默認情況下,OFS變量是空格,你可以設置OFS變量來指定你需要的分隔符:

awk 'BEGIN {FS=":";OFS="---"} {print $1,$6,$7}' /etc/passwd

有時,字段的分布沒有固定的分隔符。在這些情況下,FIELDWIDTHS 變量可以解決問題。

假設我們有以下內容:

1235.96521
927-8.3652
36257.8157
awk 'BEGIN{FIELDWIDTHS="3 4 3"}{print $1,$2,$3}' testfile

查看輸出。輸出字段為每行3個,每個字段長度都基于我們由FIELDWIDTH分配的字段。

更多的變量

還有一些其他變量可以幫助你獲取更多信息:

  • ARGC:獲取傳遞的參數數量。
  • ARGV:獲取命令行參數。
  • ENVIRON :shell環境變量及其對應值的數組
  • FILENAME:awk處理的文件名。
  • NF :Fields正在處理的行數。
  • NR:檢索處理過的記錄總數。
  • FNR:被處理的記錄。

IGNORECASE:忽略字符的大小寫。

讓我們測試一下。

root@didiplus:~#  awk 'BEGIN{print ARGC,ARGV[1]}' myfile
2 myfile

ENVIRON變量檢索shell環境變量,如下所示:

root@didiplus:~# awk 'BEGIN {print ENVIRON["PATH"]}'
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

您可以使用不帶ENVIRON變量的 bash 變量,如下所示:

root@didiplus:~# echo | awk -v home=$HOME '{print "My home is" home}'
My home is/root

NF變量指定記錄中的最后一個字段,但不知道其位置:

awk 'BEGIN{FS=":"; OFS=":"} {print $1,$NF}' /etc/passwd

如果像這樣鍵入NF變量,則可以將其用作數據字段變量:$NF。

讓我們看一下這兩個例子來了解FNR和NR變量之間的區別:

awk 'BEGIN{FS=","}{print $1,"FNR="FNR}' myfile myfile

在此示例中,awk命令定義兩個輸入文件。相同的文件,但處理了兩次。輸出是第一個字段值和FNR變量。

現在,檢查NR變量并查看差異:

$ awk '
BEGIN {FS=","}
{print $1,"FNR="FNR,"NR="NR}
END{print "Total",NR,"processed lines"}' myfile myfile

當涉及到第二個文件時,FNR變量變為1,但NR變量保留其值。

用戶自定義變量

變量名稱可以是任何內容,但不能以數字開頭。您可以像在shell腳本中一樣分配變量,如下所示:

awk '
BEGIN{
test="Welcome to LikeGeeks website"
print test
}'

執行上述命令后,輸出如下結果:

結構化命令

1.if循環

awk腳本語言支持if條件語句。testfile包含以下內容:

10
15
6
33
45
root@didiplus:~# awk '{if ($1 > 30) print $1}' testfile
33
45

如果要運行多個語句,則應使用大括號:

root@didiplus:~# awk '{
if ($1 > 30)
{
x = $1 * 3
print x
}
}' testfile
99

您可以使用如下所示的else語句:

root@didiplus:~# awk '{
if ($1 > 30)
{
x = $1 * 3
print x
} else
{
x = $1 / 2
print x
}}' testfile
5
7.5
3
99
135

或者在同一行中鍵入它們,并用分號分隔 if 語句,如下所示:

root@didiplus:~# awk '{ if ($1>20) print $1*2;else print $1/2}' testfile
5
7.5
3
66
90

2.while循環

您可以使用while循環遍歷具有條件的數據。

awk '{
sum = 0
i = 1
while (i < 5)
{
sum += $i
i++
}

average = sum / 3
print "Average:",average
}' testfile
  • $i:是取到testfile的每一列的值
  • while循環運行,每次它都會向sum變量加$i的值,直到 i 變量變為 4。

您可以使用break命令退出循環,如下所示:

awk '{
sum = 0
i = 1
while (i < 5)
{
sum += $i
if (i == 3) 
break
i++
}
average = sum / 3
print "Average:",average
}' testfile

結果還是和上面的輸出的一樣。

3.for循環

awk腳本語言支持for循環:

awk '{
total = 0
for (var = 1; var < 5; var++)
{
total += $var
}
avg = total / 3
print "Average:",avg

}' testfile

格式化打印

awk中的printf命令允許你使用格式說明符打印出格式化的輸出。

格式說明符如下所示:

%[modifier]control-letter

下面列出了可用于printf的格式說明符:

  • c:以字符串的形式打印數值輸出。
  • d:打印一個整數值。
  • e:打印科學數字。
  • f:打印浮點數。
  • o:打印一個八進制值。
  • s:打印文本字符串。

這里我們使用printf來格式化輸出:

awk 'BEGIN{
x = 100 * 100
printf "The result is: %e\n", x
}'

內置函數

Awk提供了幾個內置函數,例如:

1.數學函數

如果你喜歡數學,你可以在awk腳本中使用這些函數:

  • sin(x)
  • cos(x)
  • sqrt(x)
  • exp(x)
  • log(x)
  • rand()

而且它們可以正常使用:

root@didiplus:~# awk 'BEGIN{x=exp(5); print x}'
148.413

2.字符串函數

有很多字符串函數,你可以查看列表,但我們將其中一個作為示例來研究,其余的都是一樣的:

root@didiplus:~# awk 'BEGIN{x = "likegeeks"; print toupper(x)}'
LIKEGEEKS

函數 toupper將傳遞的字符串的字符大小寫轉換為大寫。

3.用戶自定義函數

您可以定義您的函數并像這樣使用它們:

awk '
function myfunc()
{
printf "The user %s has home path at %s\n", $1,$6
}

BEGIN{FS=":"}
{
myfunc()
}' /etc/passwd

在這里,我們定義了一個名為myprint的函數,然后在腳本中使用它通過printf函數打印輸出。

總結

AWK是一款功能強大的數據處理工具,它能夠高效地處理復雜的文本文件和數據集。無論你是需要處理日志、統計數據,還是生成格式化的報表,AWK都能輕松勝任。通過熟練掌握AWK命令,你可以極大提升工作效率,輕松應對各種數據處理任務。

責任編輯:趙寧寧 來源: 攻城獅成長日記
相關推薦

2023-11-13 08:16:08

MySQL數據數據庫

2019-07-09 08:23:07

數據安全旅游網絡安全

2024-12-27 08:39:10

2024-08-29 08:58:30

JPA編寫數據操

2024-07-17 08:29:20

2016-04-29 10:02:39

2016-09-09 01:07:06

數據中心容量規劃數據中心

2021-06-21 11:05:30

CSS前端代碼

2021-04-29 08:13:49

Mac 工具軟件

2025-06-09 07:35:00

NumPy數據分析數組

2025-03-11 14:09:04

2025-03-11 08:34:22

2021-04-07 13:43:07

PythonDash數據庫

2022-09-29 10:51:18

ShellLinux命令審計

2016-04-13 11:31:32

數據分析數據獲取大數據應用

2009-09-13 20:28:38

Linq插入數據

2021-06-10 09:53:04

數據統計統計分析數據

2020-10-22 15:05:43

開發者技能工具

2010-05-27 15:50:39

點贊
收藏

51CTO技術棧公眾號

国产尤物视频在线| 喜爱夜蒲2在线| 新版中文字幕在线资源| 视频一区视频二区中文| xxx成人少妇69| 超碰在线国产| 成人一级生活片| 91综合国产| 在线观看一区二区视频| 欧美视频第三页| 日韩综合小视频| 国产美女直播视频一区| 成人激情视屏| 精品播放一区二区| 欧美777四色影视在线| 国产欧美一区二区三区在线老狼| 欧美日韩中文国产一区发布| 精品国产一区二区三区av片| 一区二区三区美女xx视频| www在线免费观看| 亚洲精品国产精品乱码不99| 久久国产亚洲精品无码| 蜜臀久久久久久久| 国语精品免费视频| 久久精品欧美一区| 热久久99这里有精品| 亚洲网站免费| 一区二区三区www| www.超碰在线| 日韩午夜av电影| 婷婷激情在线| 在线观看欧美日本| 精品视频一二区| 色狠狠色狠狠综合| 新版中文字幕在线资源| 亚洲欧美另类久久久精品| 久久久噜噜噜www成人网| 国产不卡视频在线播放| 一本一道久久a久久综合精品| 国产综合欧美| 国产98在线|日韩| 欧美一区影院| 97av自拍| 精品成人久久| 久久久久久九九九九| 精品69视频一区二区三区Q| 91精品视频免费观看| 国产成人精品久久二区二区| 性欧美69xoxoxoxo| 欧美3p视频在线观看| 国产精品99久久久久| 亚洲视频小说| 国产乱子伦视频一区二区三区 | 亚欧洲精品视频在线观看| 亚洲精品美女久久久| 国产福利片在线观看| 亚洲乱码国产乱码精品精天堂| 裤袜国产欧美精品一区| 亚洲欧美国产制服动漫| 欧美电影在线观看网站| 欧美风情在线观看| 国产成人精品一区二区免费看京| 国产精品视频导航| 国产精品v日韩精品v欧美精品网站| 91福利视频导航| 亚洲综合电影一区二区三区| 一区二区三区精品国产| 97精品久久久久中文字幕| 性刺激的欧美三级视频| 亚洲在线观看免费| 在线视频婷婷| 国产亚洲精品日韩| 精品三级av在线导航| 91久久久久久久久久久久久| 久久高清免费观看| 欧美极品欧美精品欧美| 悠悠色在线精品| 羞羞的网站在线观看| 精品国模在线视频| 天天天综合网| 热这里只有精品| 国产精品激情偷乱一区二区∴| 蜜桃视频在线免费| 亚洲国产99精品国自产| 麻豆精品在线| 久久资源综合| 久久久噜噜噜久久久| 亚洲综合婷婷| 伊人色综合久久天天五月婷| 国产日韩欧美不卡在线| 成人网视频在线观看| 亚洲性xxxx| 91亚洲一区| 国产情侣第一页| 午夜在线电影亚洲一区| 欧亚在线中文字幕免费| 国产成人精品免费视频| 日韩1区2区3区| 久久国产精品国产精品| 欧美精品亚洲二区| 91久久偷偷做嫩草影院电| 粉嫩av一区二区三区免费观看| 国产视频在线观看一区| 午夜一级久久| 久久精品国产v日韩v亚洲| 国产调教一区二区三区| 国产一级不卡毛片| 亚洲黄色片网站| 婷婷综合社区| eeuss鲁片一区| 国产视频在线视频| 97久久精品视频| 日本一区二区久久| 精品一区二区免费在线观看| 中文字幕毛片| 国产高潮呻吟久久久| 国产清纯美女被跳蛋高潮一区二区久久w| 亚洲小说图片| 亚洲自拍电影| av在线私库| 国产在线精品一区二区三区》 | 欧美超级免费视 在线| 国产精品99免费看| 在线播放免费| 亚洲在线视频观看| 亚洲欧美一区二区三区四区| 一区二区日韩欧美| 有色激情视频免费在线| 国产精品草莓在线免费观看| 一区二区高清免费观看影视大全 | av在线播放一区二区三区| 91电影在线播放| 国产一区福利视频| 亚洲成av人影院在线观看| 美腿丝袜亚洲色图| 成人av免费电影网站| 国产一区二区在线视频播放| 亚洲欧美福利一区二区| 欧美人体视频xxxxx| 成人激情视频网| 日韩av中文字幕一区二区| 成年人视频免费在线播放| jizz国产| ga∨成人网| 污的网站在线观看| caoporn免费在线| 99re热视频在线| 国产爆乳无码一区二区麻豆| 国产欧美日韩视频| 亚洲成人网av| 国产精品国产三级国产专播品爱网| **日韩最新| 理论视频在线| 国产美女三级视频| 91夜夜未满十八勿入爽爽影院| 欧美高清一级大片| 自拍av一区二区三区| 激情欧美亚洲| 欧美性片在线观看| 一级理论片在线观看| 潘金莲一级淫片aaaaa免费看| 3344国产精品免费看| 精品国产免费一区二区三区香蕉| 日本一二三四高清不卡| 三级久久三级久久| 国产精品成人av| 一区二区三区日本视频| 亚洲精品承认| 中文字幕在线视频网| 欧美两根一起进3p做受视频| 国语精品中文字幕| 97人人模人人爽人人喊中文字| 日韩欧美一二区| 久久久久久电影| 成人三级视频| 最近最新中文字幕在线| 欧美h视频在线观看| 精品国产免费一区二区三区| 成人免费淫片aa视频免费| 欧美尺度大的性做爰视频| 亚洲精品中文字幕女同| 欧美日韩成人免费| **网站欧美大片在线观看| 久久国产欧美| 亚洲欧洲午夜| 国产福利91精品| 亚洲精品国产精品乱码不99| 久操成人在线视频| 国产免费视频传媒| 国产区亚洲区欧美区| 91大片在线观看| 777视频在线观看| 成人精品动漫一区二区三区| 久久久久久久久久电影| 色哟哟亚洲精品一区二区| 激情五月五月婷婷| 国产精品无码久久久久| 99免费精品视频| 久久欧美在线电影| 宅男深夜国产|