时间:2021-05-19
看了网上好多关于AWK内建变量的文章,这里加上个人的理解和记忆,可以让大家掌握这些变量的基本用法。
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}'111OFS 指定输出字段列分隔符(Output Font space)
[~/AWK_learning]$ echo "111 222 333" |awk 'BEGIN{OFS="|";}{print $1,$2,$3}'111|222|333RS指定行分隔符 默认分隔符为\n(Row Space)
[~/AWK_learning]$ echo "111 222|333 444|555 666" | awk 'BEGIN{RS="|"}{print $0}'111 222333 444555 666ORS指定输出行分隔符
[~/AWK_learning]$ awk 'BEGIN{ORS="|";}{print $0;}' test.txt111 222|333 444|555 666RT 代指分隔符
[~/AWK_learning]$ echo "111 222|333 444|555 666" | awk 'BEGIN{RS="|"}{print $0,RT}'111 222 |333 444 |555 666 |NF 每行字段总数(Number of Font)
[~/AWK_learning]$ cat test.txt111 222333 444555 666[~/AWK_learning]$ awk '{print NF}' test.txt222[~/AWK_learning]$ awk '{print $NF}' test.txt222444666NR 当前行数(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下面我们在来看下,在内建变量执行中的相关问题:
NR表示从awk开始执行后,按照记录分隔符读取的数据次数,默认的记录分隔符为换行符,因此默认的就是读取的数据行数,NR可以理解为Number of Record的缩写。
在awk处理多个输入文件的时候,在处理完第一个文件后,NR并不会从1开始,而是继续累加,因此就出现了FNR,每当处理一个新文件的时候,FNR就从1开始计数,FNR可以理解为File Number of Record。
NF表示目前的记录被分割的字段的数目,NF可以理解为Number of Field。
下面以示例程序来进行说明,首先准备两个输入文件class1和class2,记录了两个班级的成绩信息,内容分别如下所示:
CodingAnts@ubuntu:~/awk$ cat class1zhaoyun 85 87guanyu 87 88liubei 90 86CodingAnts@ubuntu:~/awk$ cat class2caocao 92 87 90guojia 99 96 92现在要查看两个班级的所有成绩信息,并在每条信息前加上行号,则可以使用下面的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这里的行号就是通过NR来实现的,awk每读取一条记录,NR的值便加一。如果要求每个班级的行号从头开始变化,则需要使用FNR来实现,如下:
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声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
学习awk时,一定要记得动手去实践,只有在实践中才能发现问题,以下就我在学习中和实践中的经验,总结一下RS,ORS,FS,OFS的区别和联系。一,RS与ORS1
1、例子:每隔100行插入一条记录,并且此条记录的第一列包含行号,其他列与第一行相同#!/bin/shvar="00001"#变量cata.txt|awk'NR
但是,linux系统的常用小工具awk天生对列操作友好,有时直接在perl中调用awk比写相应的perl脚本要方便有效的多。比如用system插入awk语句:复
Linux系统操作中,awk是款文本处理工具,提供多种功能,那么如何使用awk进行数组排序呢?其实awk数组排序的方法有很多种,下面小编就给大家详细介绍下L
awk是linux上文字处理的一款工具,具有强大的字段截取功能,今天我们就来介绍利用awk来进行文字数据的处理的方法,请看下文详细介绍。1、awk可以显示文件中