新聞中心
在日常的數(shù)據(jù)處理中,經(jīng)常需要從文本中提取數(shù)字,并對其進(jìn)行統(tǒng)計(jì)、計(jì)算等操作。但是,文本文件中的數(shù)字往往夾雜著大量無用的字符,如字母、符號等,而手動處理這些數(shù)字不僅繁瑣而且易出錯。那么,如何呢?

創(chuàng)新互聯(lián)從2013年創(chuàng)立,先為撫松等服務(wù)建站,撫松等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為撫松企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
一、初識Linux Awk命令
1.1 什么是Awk命令
Awk命令是在Unix和Linux常用的一個(gè)文本處理工具,可以將文本內(nèi)容按照指定的規(guī)則進(jìn)行匹配、查找、處理等操作。其基本語法如下:
“`awk ‘pattern { action }’ filename“`
其中,pattern表示匹配模式,action表示匹配成功后執(zhí)行的操作,filename表示要處理的文件名。通常,Awk命令會自動讀取標(biāo)準(zhǔn)輸入,即鍵盤輸入或文件輸入。
1.2 Awk命令的基本功能
在使用Awk命令時(shí),需要掌握一些基本的功能和概念:
– 分隔符:Awk命令默認(rèn)的分隔符是空格和制表符,可以使用-F參數(shù)指定自定義分隔符;
– 字段:Awk命令將每一行文本按照分隔符分割成若干個(gè)字段,可以使用$1、$2等表示第1、2個(gè)字段;
– 模式匹配:可以使用正則表達(dá)式對文本進(jìn)行模式匹配;
– 操作符:可以使用簡單的四則運(yùn)算等操作符對字段進(jìn)行計(jì)算;
– 變量:Awk命令內(nèi)置了一些變量,如NR表示當(dāng)前行號,NF表示當(dāng)前行的字段數(shù)等。
二、利用Awk命令提取數(shù)字
在使用Awk命令提取數(shù)字時(shí),通常需要按照以下步驟進(jìn)行:
2.1 根據(jù)需求制定匹配模式
根據(jù)要提取的數(shù)字的特征制定匹配模式。例如,要提取文本中的所有整數(shù),可以使用正則表達(dá)式`/[0-9]+/`。
2.2 使用Awk命令進(jìn)行匹配
然后,使用Awk命令進(jìn)行匹配,找到符合模式的文本內(nèi)容。例如,使用以下命令可以從名為input.txt的文件中找到所有整數(shù):
“`awk ‘/[0-9]+/ { print $0 }’ input.txt“`
其中,`/[0-9]+/`表示匹配所有整數(shù),`print $0`表示將匹配到的整行輸出。
2.3 提取匹配結(jié)果中的數(shù)字
從匹配結(jié)果中提取數(shù)字。由于匹配結(jié)果包含了大量的其他字符,需要使用Awk命令的計(jì)算功能將數(shù)字提取出來。例如,使用以下命令將匹配結(jié)果中的數(shù)字相加:
“`awk ‘/[0-9]+/ { sum+=$0 } END { print “Total: “, sum }’ input.txt“`
其中,`sum+=$0`表示將匹配到的數(shù)字相加并賦值給變量sum,`END { print “Total: “, sum }`表示在處理完整個(gè)文件后輸出變量sum的值。
三、實(shí)戰(zhàn)案例:提取日志中的響應(yīng)時(shí)間
下面通過一個(gè)實(shí)戰(zhàn)案例來演示如何利用Awk命令提取日志中的響應(yīng)時(shí)間。
假設(shè)有以下日志文件log.txt:
“`
2023-05-01 12:00:01 INFO: Request 1 – Start
2023-05-01 12:00:02 INFO: Request 1 – End (time=100ms)
2023-05-01 12:00:03 INFO: Request 2 – Start
2023-05-01 12:00:04 WARN: Request 3 – Timeout
2023-05-01 12:00:05 INFO: Request 2 – End (time=120ms)
2023-05-01 12:00:06 INFO: Request 3 – Start
2023-05-01 12:00:07 INFO: Request 3 – End (time=150ms)
“`
要求從中提取出所有響應(yīng)時(shí)間,并計(jì)算平均響應(yīng)時(shí)間。
步驟如下:
3.1 制定匹配模式
根據(jù)日志格式,響應(yīng)時(shí)間的格式為`(time=xxxms)`,因此制定匹配模式為`/(time=[0-9]+ms)/`。
3.2 使用Awk命令進(jìn)行匹配
使用以下命令匹配響應(yīng)時(shí)間:
“`awk ‘/(time=[0-9]+ms)/ { print $0 }’ log.txt“`
其中,`/(time=[0-9]+ms)/`表示匹配響應(yīng)時(shí)間,`print $0`表示將匹配到的整行輸出。
3.3 提取匹配結(jié)果中的數(shù)字并計(jì)算
使用以下命令將匹配結(jié)果中的數(shù)字相加,并統(tǒng)計(jì)平均響應(yīng)時(shí)間:
“`awk ‘/(time=[0-9]+ms)/ { sum+=$0; count++ } END { print “Total: “, sum; print “Average: “, sum/count }’ log.txt“`
其中,`sum+=$0`表示將匹配到的響應(yīng)時(shí)間相加并賦值給變量sum,`count++`表示統(tǒng)計(jì)響應(yīng)時(shí)間個(gè)數(shù),`END { print “Total: “, sum; print “Average: “, sum/count }`表示在處理完整個(gè)文件后輸出變量sum和平均值。
最終輸出結(jié)果為:
“`
Total: 370ms
Average: 123.333ms
“`
四、
本文介紹了利用Linux Awk技巧進(jìn)行數(shù)字提取的方法,主要包括制定匹配模式、使用Awk命令進(jìn)行匹配、提取匹配結(jié)果中的數(shù)字三個(gè)步驟。同時(shí),通過實(shí)戰(zhàn)案例展示了如何從日志中提取響應(yīng)時(shí)間,并計(jì)算平均響應(yīng)時(shí)間。Awk命令具有靈活高效的文本處理能力,值得我們在日常工作中多加應(yīng)用和深入學(xué)習(xí)。
相關(guān)問題拓展閱讀:
- 如何在Linux中使用awk命令
如何在Linux中使用awk命令
awk實(shí)例
1、cat /etc/passwd|awk -F: ‘{print $1}’
2、linux的awk一般都是gawk,/bin/awk -> gawk
3、awk ‘/abc/’ file.txt 顯示文件中包含abc行。類似grep abc a.txt
4、awk ‘{print NR,NF,$1,$NF,}’ file.txt按空格分隔列,顯示當(dāng)前記錄號、域數(shù)和每一行的之一列和最后一列。
-F參數(shù)可以設(shè)置分割參數(shù),例如按:分割
awk -F: ‘{print $1}’ /etc/passwd
或者cat file|awk -F “|” ‘{print $1}’
5、awk編程語言
cat v.txt|awk ‘{print length($1)}’
6、awk中使用NR和FNR,一般在awk處理多個(gè)文件時(shí),NR==FNR才有意義
NF 當(dāng)前記錄中的字段數(shù)。
NR 當(dāng)前型磨記錄數(shù)。
FNR同NR,但相對于當(dāng)前文件。
awk ‘{print NR,FNR}’ test.txt test2.txt
awk ‘{if(NR==FNR){a=$1;}else{print $1,a}}’ b.txt a.txt
7、打此租備印奇數(shù)行與偶數(shù)行
awk ‘NR%2’ test.txt
awk ‘!(NR%2)’ test.txt
8、殺死森毀tomcat的stop.sh腳本
#!/bin/sh
ps -ef| grep tomcat |grep -v grep | awk ‘{print $2}’ |xargs kill -9
9、打印前7列
cat a.txt|awk ‘{NF=7}1’ >> b.txt
tail -f access.log|awk ‘NF=7′ OFS=’\t’ >> b.txt
cut -d”,” -f3-6 urfile
awk:用于緩脊吵一行中分成數(shù)個(gè)“字段”來處理。適合處理
小型數(shù)據(jù)。
運(yùn)行模式:awk
‘條件類型1{動作1}
條件類型2{動作2}
…’
filename
#
last
|
awk
$1
“\t”
$3}’
大于
=
大于或等于
小于或等于
==
等于
!=
不等于
范例:
cat
/etc/passwd
|
awk
‘{FS=”:”}
$3
$1
“\t”
$3}’
文件/etc/passwd是以”:”分隔的,查看第三欄小于10的數(shù)據(jù),并且只顯示帳號與第三欄
關(guān)于linux awk 提取數(shù)字的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都網(wǎng)站營銷推廣找創(chuàng)新互聯(lián),全國分站站群網(wǎng)站搭建更好做SEO營銷。
創(chuàng)新互聯(lián)(www.cdcxhl.com)四川成都IDC基礎(chǔ)服務(wù)商,價(jià)格厚道。提供成都服務(wù)器托管租用、綿陽服務(wù)器租用托管、重慶服務(wù)器托管租用、貴陽服務(wù)器機(jī)房服務(wù)器托管租用。
當(dāng)前名稱:利用Linux Awk技巧,簡單高效地提取數(shù)字 (linux awk 提取數(shù)字)
鏈接URL:http://m.fisionsoft.com.cn/article/dphcggj.html


咨詢
建站咨詢
