LINUX中詳解AWK內(nèi)建變量FS,NF,NR,RT,RS,ORS,OFS
看了網(wǎng)上好多關(guān)于AWK內(nèi)建變量的文章,這里加上個(gè)人的理解和記憶,可以讓大家掌握這些變量的基本用法。
FS 指定字段un列分隔符(Font Space)
[~/AWK_learning]$ echo "111|222|333" | awk '{print $1}' 111|222|333 [~/AWK_learning]$ echo "111|222|333" | awk 'BEGIN{FS="|"}{print $1}' 111
OFS 指定輸出字段列分隔符(Output Font space)
[~/AWK_learning]$ echo "111 222 333" |awk 'BEGIN{OFS="|";}{print $1,$2,$3}' 111|222|333
RS指定行分隔符 默認(rèn)分隔符為\n(Row Space)
[~/AWK_learning]$ echo "111 222|333 444|555 666" | awk 'BEGIN{RS="|"}{print $0}' 111 222 333 444 555 666
ORS指定輸出行分隔符
[~/AWK_learning]$ awk 'BEGIN{ORS="|";}{print $0;}' test.txt 111 222|333 444|555 666
RT 代指分隔符
[~/AWK_learning]$ echo "111 222|333 444|555 666" | awk 'BEGIN{RS="|"}{print $0,RT}' 111 222 | 333 444 | 555 666 |
NF 每行字段總數(shù)(Number of Font)
[~/AWK_learning]$ cat test.txt 111 222 333 444 555 666 [~/AWK_learning]$ awk '{print NF}' test.txt 2 2 2 [~/AWK_learning]$ awk '{print $NF}' test.txt 222 444 666
NR 當(dāng)前行數(shù)(Number of Row)
[~/AWK_learning]$ cat test.txt 111 222 333 444 555 666 777 [~/AWK_learning]$ awk '{print NR}' test.txt 1 2 3 [~/AWK_learning]$ awk '{print $NR}' test.txt 111 444 777
下面我們?cè)趤砜聪?,在?nèi)建變量執(zhí)行中的相關(guān)問題:
NR表示從awk開始執(zhí)行后,按照記錄分隔符讀取的數(shù)據(jù)次數(shù),默認(rèn)的記錄分隔符為換行符,因此默認(rèn)的就是讀取的數(shù)據(jù)行數(shù),NR可以理解為Number of Record的縮寫。
在awk處理多個(gè)輸入文件的時(shí)候,在處理完第一個(gè)文件后,NR并不會(huì)從1開始,而是繼續(xù)累加,因此就出現(xiàn)了FNR,每當(dāng)處理一個(gè)新文件的時(shí)候,F(xiàn)NR就從1開始計(jì)數(shù),F(xiàn)NR可以理解為File Number of Record。
NF表示目前的記錄被分割的字段的數(shù)目,NF可以理解為Number of Field。
下面以示例程序來進(jìn)行說明,首先準(zhǔn)備兩個(gè)輸入文件class1和class2,記錄了兩個(gè)班級(jí)的成績(jī)信息,內(nèi)容分別如下所示:
CodingAnts@ubuntu:~/awk$ cat class1 zhaoyun 85 87 guanyu 87 88 liubei 90 86 CodingAnts@ubuntu:~/awk$ cat class2 caocao 92 87 90 guojia 99 96 92
現(xiàn)在要查看兩個(gè)班級(jí)的所有成績(jī)信息,并在每條信息前加上行號(hào),則可以使用下面的awk指令;
CodingAnts@ubuntu:~/awk$ awk '{print NR,$0}' class1 class2 1 zhaoyun 85 87 2 guanyu 87 88 3 liubei 90 86 4 caocao 92 87 90 5 guojia 99 96 92
這里的行號(hào)就是通過NR來實(shí)現(xiàn)的,awk每讀取一條記錄,NR的值便加一。如果要求每個(gè)班級(jí)的行號(hào)從頭開始變化,則需要使用FNR來實(shí)現(xiàn),如下:
CodingAnts@ubuntu:~/awk$ awk '{print FNR,$0}' class1 class2 1 zhaoyun 85 87 2 guanyu 87 88 3 liubei 90 86 1 caocao 92 87 90 2 guojia 99 96 92
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。