设为首页 收藏本站
查看: 1459|回复: 0

[经验分享] Linux awk命令使用

[复制链接]

尚未签到

发表于 2019-2-18 09:10:26 | 显示全部楼层 |阅读模式
Linux awk命令使用




目录


笔记日期20180408




awk
1. print
2. 变量FS,OFS,NF,NR
3. printf命令
4. 操作符
5. PATTERN












Introduction


Gawk  is  the GNU Project's implementation of the AWK programming lan-
guage.  It conforms to the definition of the  language  in  the  POSIX
1003.1  Standard.  This version in turn is based on the description in
The AWK Programming Language, by Aho, Kernighan, and Weinberger.  Gawk
provides  the additional features found in the current version of UNIX
awk and a number of GNU-specific extensions.


The command line consists of options to gawk itself, the  AWK  program
text  (if not supplied via the -f or --file options), and values to be
made available in the ARGC and ARGV pre-defined AWK variables.


Pgawk is the profiling version of gawk.  It is identical in every  way
to  gawk,  except  that programs run more slowly, and it automatically
produces an execution profile in the file awkprof.out when done.   See
the --profile option, below.


Dgawk  is an awk debugger. Instead of running the program directly, it
loads the AWK source code and then  prompts  for  debugging  commands.
Unlike  gawk  and  pgawk, dgawk only processes AWK program source pro?
vided with the -f option.  The debugger is documented in GAWK:  Effec?
tive AWK Programming.




awk 报告生成工具,格式化文本输出


gawk - pattern scanning and processing language
基本用法: gawk [options] 'program' file ...
program: PATTERN{ACTION STATEMENTS}
语句之间分号分隔

选项:
-F 指明输入时用到的字段分隔符
-v var=value: 自定义变量

1. print
print item1, item2, ...

要点:
(1) 逗号分隔符
(2) 输出的各item可以字符串,也可以是数值,当前记录的字段、变量、或awk表达式
(3) 如省略item,相当于print $0 即全部输出

# awk -F: '{print "hello  " $1,$2}' /etc/passwd
每行会打印一个hello字符

2. 变量
2.1 内建变量
此处只给命令行,执行效果,有兴趣可以直接放到命令行里查看

FS: input field seperator, 默认为空白字符
OFS: output field seperator, 默认为空白字符
# awk -v FS=":" -v OFS=" ++ " '{print $1,$2}' /etc/passwd
# awk '{FS=":";OSF=" ++ ";print $1,$2}' /etc/passwd
两条命令含义一样,只是不同的格式
RS: input record seperator,输入时的换行符
ORS: output record seperator, 输出时的换行符
# awk '{RS="\n";ORS="--------";print $0}' /etc/passwd
这个表示更换换行符

NF: number of field, 每一行的字段数
# awk '{print NF}' /etc/fstab
打印出每一行的字段数

# awk '{print $NF}' /etc/fstab
打印出最后一个字段的字符串,是因为将变量替换成数值,而数字加$符号表示打印
具体某个字段,所以最后才会出现打印最后一个字段的字符串
NR: number of record, 显示文件的行数
# awk '{print NR}' /etc/fstab

FILENAME: 当前文件名
# awk '{print FILENAME}' /etc/fstab


ARGC: 命令行参数个数
# awk 'BEGIN{print ARGC}' /etc/fstab
这个会打印出2含义是awk这个命令后跟了两个参数
ARGV: 数组,保存的是命令行所给定的各参数
# awk '{print ARGV[1]}' /etc/fstab /etc/passwd

2.2 自定义变量
(1) -v var=value
变量区分字符大小写(在此前已经用过,只不过那是内建,此处只需要自定义即可)
# awk -v HE="hello" '{print HE,$1}' /etc/fstab

(2)在program中直接定义
# awk '{HE="hello";print HE,$1}' /etc/fstab
含义与上方的命令一样


3. printf命令
格式化输入: printf FORMAT, item1, item2, ...
(1) FORMAT必须要给出
(2) 不会自动换行,需要显式给出换行控制符,\n
(3) FORMAT中需要分别为后面的每个item指定一个格式化符号;

格式符(风格是C语言的,如果学过C应该很容易理解)
%c 显示字符的ASCII码;
%d,%i 显示十进制整数
%e,%E 科学计数法数值显示
%f 显示为浮点数
%g,%G 以科学计数法或浮点形式显示数值
%s 显示字符串
%u 无符号整数
%% 显示%自身

修饰符(也是C语言里的东东)
用来格式化输出,如每个字段给几个字符等
#[.#] 第一个数字控制显示的宽度,第二个#表示小数点后的精度
%3.1f
- 左对齐
+ 显示数值的符号

# awk -F: '{printf "UserName: %s\n",$1}' /etc/passwd
将所有的用户名打印出来,并在其前方加入Username:

# awk -F: '{printf "UserName: %-30s   UserID: %s\n",$1,$3}' /etc/passwd
这条效果更工整


4. 操作符
算术操作符
x+y, x-y, x*y, x/y, x^y, x%y
-x
+x 转换为数值

字符串操作符:没有符号的操作符,字符串连接

赋值操作符
=, +=, -=, *=, /=, %=, ^=
++, --

比较操作符
>, >=,

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-673788-1-1.html 上篇帖子: linux 下的grep命令 下篇帖子: Linux 的命令机制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表