Linux文本三剑客之 awk -------awk擅长取列
  lxSY9k0Slakj 2023年12月06日 18 0

awk [options] 'program' file

注意:program部分只能用单引号,不能用双引号,否则会报错.

1、常用命令选项

-F            指定分隔符,默认空格或Tab键

-f            调用awk脚本

-v            调用外部shell变量

2、awk内置变量

$1..$n        指定分隔符号对应的值

$0            当前行的内容

$NF           最后一列

NF            指定分隔符号后,行的列数

NR            当前行的行号

FS            保存或设置字段分隔符

FNR           保存当前文件的行数

FILENAME      保存当前的文件名

ENVIRON       调用shell环境变量

awk '{print $0}' a.txt               #打印文件所有内容($0代表整行)

awk '{print $1,$2}' a.txt            #打印第1列和第2列的内容

awk -F":" '{print $1,$2}' OFS="," a.txt           #以:为输入分隔符并且以,为输出分隔符打印第1列和第2列的内容

awk -F"," '{print NR,$NF}' a.txt        #以,为分隔符并打印行号和最后一列

awk -F"[ .]" '{print $(NF-1)}' OFS="\t" a.txt     #以空格或.为输入分隔符并以制表符为输出分隔符打印倒数第二列

3、正则表达式

/正则/        匹配正则(行)

~/正则/       匹配正则(列)

!~/正则/      不匹配

awk -F":" '$1~/root/ {print $0}'  /etc/passwd

awk -F":" '$1!~/root/ {print $0}'  /etc/passwd

awk -F":" '$1~/^ro/ {print $3}' /etc/passwd

awk -F":" '$1~/[0-9]/ {print $1,$6}' /etc/passwd

4、数值比较 

awk -F":" '$3==0{print $0}' /etc/passwd

awk -F":" '$3!=0{print $0}' /etc/passwd

awk -F":" '$1=="root"{print $0}'  /etc/passwd

5、逻辑比较(多个条件)

逻辑与 &&  多个条件同时成立

逻辑或 ||  多个条件有一个成立

逻辑非 !   取反

awk  -F":" '$7=="/bin/bash" && $3<500{print $0}' /etc/passwd

awk  -F":" '$7=="/bin/bash" || $3<500{print $0}' /etc/passwd

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月06日 0

暂无评论

推荐阅读
  bYdMetjCLs2g   2023年11月28日   18   0   0 bash
  wwLZeziuqjLR   2023年12月08日   73   0   0 Dockercentosbash
  mjtHZIki74si   2023年12月06日   23   0   0 ubuntubash
  hHWnOnebRjW2   2023年11月27日   20   0   0 PostgreSQLsqlbash
  vxoexqgjyiCS   2023年11月25日   15   0   0 linuxbash数组