python pandas获取行号_python获取行号和函数名
敢用自己的名字做軟件名字的,都有非常強(qiáng)大的自信。比如,垠語言什么的。
awk的命名得自于它的三個創(chuàng)始人姓別的首字母,都是80來歲的老爺爺了。當(dāng)然也有四個人的組合:流行的GoF設(shè)計(jì)模式。但對于我這游戲愛好者來說,想到的竟然是三位一體,果然是不爭氣啊。
它長的很像C,為什么這么有名,除了它強(qiáng)大的功能,我們姑且認(rèn)為a這個字母比較靠前吧。awk比sed簡單,它更像一門編程語言。
打印某一列
下面,這幾行代碼的效果基本是相同的:打印文件中的第一列。
這可能是awk最常用的功能了:打印文件中的某一列。它智能的去切分你的數(shù)據(jù),不管是空格,還是TAB,大概率是你想要的。
對于csv這種文件來說,分隔的字符是,。AWK使用-F參數(shù)去指定。以下代碼打印csv文件中的第1和第2列。
awk -F "," '{print $1,$2}' file
由此,我們可以看出一個基本的awk命令的組成部分。
一般的開發(fā)語言,數(shù)組下標(biāo)是以0開始的,但awk的列$是以1開始的,而0指的是原始字符串。
網(wǎng)絡(luò)狀態(tài)統(tǒng)計(jì)
本小節(jié),采用awk統(tǒng)計(jì)netstat命令的一些網(wǎng)絡(luò)狀態(tài),來看一下awk語言的基本要素。netstat的輸出類似于:
其中,第6列,標(biāo)明了網(wǎng)絡(luò)連接所處于的網(wǎng)絡(luò)狀態(tài)。我們先給出awk命令,看一下統(tǒng)計(jì)結(jié)果。
netstat -ant |
awk ' \
BEGIN{print "State","Count" } \
/^tcp/ \
{ rt[$6]++ } \
END{ for(i in rt){print i,rt[i]} }'
輸出結(jié)果為:
State Count
LAST_ACK 1
LISTEN 64
CLOSE_WAIT 43
ESTABLISHED 719
SYN_SENT 5
TIME_WAIT 146
下面這張圖會配合以上命令詳細(xì)說明,希望你能了解awk的精髓。
乍一看,好嚇人的命令,但是很簡單。awk和我們通常的程序不太一樣,它分為四個部分。
1、BEGIN 開頭部分,可選的。用來設(shè)置一些參數(shù),輸出一些表頭,定義一些變量等。上面的命令僅打印了一行信息而已。
2、END 結(jié)尾部分,可選的。用來計(jì)算一些匯總邏輯,或者輸出這些內(nèi)容。上面的命令,使用簡單的for循環(huán),輸出了數(shù)組rt中的內(nèi)容。
3、Pattern 匹配部分,依然可選。用來匹配一些需要處理的行。上面的命令,只匹配tcp開頭的行,其他的不進(jìn)入處理。
4、Action 模塊。主要邏輯體,按行處理,統(tǒng)計(jì)打印,都可以。
注意點(diǎn) 1、awk的主程序部分使用單引號‘包圍,而不能是雙引號 2、awk的列開始的index是0,而不是1
例子
我們從幾個簡單的例子,來看下awk的作用。
1、輸出Recv-Q不為0的記錄
netstat -ant | awk '$2 > 0 {print}'
2、外網(wǎng)連接數(shù),根據(jù)ip分組
netstat -ant | awk '/^tcp/{print $4}' | awk -F: '!/^:/{print $1}' | sort | uniq -c
3、打印RSS物理內(nèi)存占用
top -b -n 1 | awk 'NR>7{rss+=$6}END{print rss}
4、過濾(去掉)空白行
awk 'NF' file
5、打印奇數(shù)行
awk 'a=!a' file
6、輸出行數(shù)
awk 'END{print NR}' file
這些命令,是需要了解awk的一些內(nèi)部變量的,接下來我們來介紹。
內(nèi)置變量
FS
下面的兩個命令是等價(jià)的 。
awk -F ':' '{print $3}' file
awk 'BEGIN{FS=":"}{print $3}' file
BEGIN塊中的FS,就是內(nèi)部變量,可以直接指定或者輸出。如果你的文件既有用,分隔的,也有用:分割的,FS甚至可以指定多個分隔符同時起作用。
FS="[,:|]"
其他
OFS 指定輸出內(nèi)容的分割符,列數(shù)非常多的時候,簡化操作。相似命令:
awk -F ':' '{print $1,"-",$2,"-",$4}' file
awk 'BEGIN{FS=":";OFS="-"}{print $1,$2,$4}' file
NF 列數(shù)。非常有用,比如,過濾一些列數(shù)不滿足條件的內(nèi)容。
awk -F, '{if(NF==3){print}}' file
NR 行號,例如,下面兩個命令是等價(jià)的。
cat -n file
awk '{print NR,$0}' file
RS 記錄分隔標(biāo)志 ORS 指定記錄輸出的分隔標(biāo)志
FILENAME 當(dāng)前處理的文件名稱,在一次性處理多個文件時非常有用
編程語言特性
數(shù)學(xué)運(yùn)算
從上面的代碼可以看出,awk可以做一些簡單的運(yùn)算。它的語言簡潔,不需要顯示的定義變量的類型。
比如上面的rt[$6]++,就已經(jīng)默認(rèn)定義了一個叫做rt的hash(array?),里面的key是網(wǎng)絡(luò)狀態(tài),而value是可以進(jìn)行運(yùn)算的(+-*/%)。
包含一些內(nèi)置的數(shù)學(xué)運(yùn)算(有限)
int
log
sqrt
exp
sin
cos
atan2
rand
srand
字符串操作
類似其他語言,awk也內(nèi)置了很多字符串操作函數(shù)。它本來就是處理字符串的,所以必須強(qiáng)大。
length(str) #獲取字符串長度
split(input-string,output-array,separator)
substr(input-string, location, length)
語言特性
awk是個小型的編程語言,看它的基本語法,如果你需要復(fù)雜一點(diǎn)的邏輯,請自行深入了解,包括一些時間處理函數(shù):
# logic
if(x=a){}
if(x=a){}else{}
while(x=a){break;continue;}
do{}while(x=a)
for(;;){}
# array
arr[key] = value
for(key in arr){arr[key]}
delete arr[key]
asort(arr) #簡單排序
據(jù)說,awk可以勝任所有的文本操作。因?yàn)樗旧砭褪且婚T語言啊。
End
曾經(jīng)使用awk編寫過復(fù)雜的日志處理和統(tǒng)計(jì)程序。雖然比寫sed舒暢了很多,但還是備受煎熬。更加上現(xiàn)在有各種nawk,gawk版本之間的區(qū)別,所以業(yè)務(wù)復(fù)雜度一增長,就習(xí)慣性的轉(zhuǎn)向更加簡潔、工具更全的python。
awk處理一些簡單的文本還是極其方便的,最常用的還是打印某一列之類的,包括一些格式化輸出。對于awk,要簡單的滾瓜爛熟,復(fù)雜的耳熟能詳,畢竟有些大牛,就喜歡寫這種腳本呢。
注明:轉(zhuǎn)載于小姐妹養(yǎng)的狗
總結(jié)
以上是生活随笔為你收集整理的python pandas获取行号_python获取行号和函数名的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝桥杯之《人民币金额大写》
- 下一篇: websocket python爬虫_p