国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務(wù)器 > Linux服務(wù)器 > 正文

LINUX中詳解AWK內(nèi)建變量FS,NF,NR,RT,RS,ORS,OFS

2024-09-05 23:04:20
字體:
供稿:網(wǎng)友

看了網(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 222333 444555 666

ORS指定輸出行分隔符

[~/AWK_learning]$ awk 'BEGIN{ORS="|";}{print $0;}' test.txt111 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.txt111 222333 444555 666[~/AWK_learning]$ awk '{print NF}' test.txt222[~/AWK_learning]$ awk '{print $NF}' test.txt222444666

NR 當(dāng)前行數(shù)(Number of Row)

[~/AWK_learning]$ cat test.txt111 222333 444555 666 777[~/AWK_learning]$ awk '{print NR}' test.txt123[~/AWK_learning]$ awk '{print $NR}' test.txt111444777

下面我們?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 class1zhaoyun 85 87guanyu 87 88liubei 90 86CodingAnts@ubuntu:~/awk$ cat class2caocao 92 87 90guojia 99 96 92

現(xiàn)在要查看兩個(gè)班級(jí)的所有成績(jī)信息,并在每條信息前加上行號(hào),則可以使用下面的awk指令;

CodingAnts@ubuntu:~/awk$ awk '{print NR,$0}' class1 class21 zhaoyun 85 872 guanyu 87 883 liubei 90 864 caocao 92 87 905 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 class21 zhaoyun 85 872 guanyu 87 883 liubei 90 861 caocao 92 87 902 guojia 99 96 92

 

 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 巴林左旗| 苏尼特右旗| 临海市| 景洪市| 丹阳市| 宁夏| 汾西县| 略阳县| 岳西县| 清水河县| 诸城市| 桂平市| 霍城县| 玛多县| 开阳县| 江门市| 怀化市| 略阳县| 全椒县| 和田县| 红安县| 三都| 南昌县| 富民县| 锡林郭勒盟| 达孜县| 石河子市| 曲阳县| 临猗县| 天气| 镶黄旗| 开原市| 鄂托克前旗| 夏津县| 木兰县| 黑龙江省| 兖州市| 元阳县| 涪陵区| 固原市| 元阳县|