awk 命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了awk 命令相关的知识,希望对你有一定的参考价值。

参考技术A

AWK

command 读前处理 行处理 读后处理
1、读前处理: BEGINawk_cmd1;awk_cmd2
2、行处理:定址命令
定址方法:正则、变量、比较和关系运算
正则需要用//包围起来
awk -F: \'/root/print\' gad
awk -F: \'$1~/root/print\' gad 第一列匹配
awk -F: \'$1~/<root>/print\' gad 第一列匹配,锁定字符串匹配
awk -F: \'$1!~/root/print\' gad
. 除了换行符以外的任意单个字符
[] 字符组内的任一字符
[^]对字符组内的每个字符取反(不匹配字符组内的每个字符)
[ ] 非字符组内的字符开头的行

3、读后处理ENDawk_cmd1;awk_cmd2

awk -F "" \'for(i=1;i<=NF;i++) print $i\' gad.txt 逐字换行
NF代表每行的元素个数
NR 表示AWK读入的行数 (一共处理多少行,无论多少个文件)
FNR表示读入行所在文件中的行数 (每个文件中有多少个文件)

1 1 AAAA
2 2 aaaa
3 3 a
4 1 bb
5 2 bbbbbbbb

赋值 = ++ -- += 。。。
awk \'BEGINa=1;print a++;print a\' 先执行命令然后a+1
|| 逻辑或 && 逻辑与 ! 取反
匹配正则或不匹配,正则需要用/正则/ 包围住
~ !~
关系比较字符串时要把字符串用双引号引起来
< <= > >= != ==

转义序列
\\ \\自身 $ 转义$ \\t 制表符 \\b 退格符 \\r 回车符 \\n 换行符 \\c 取消换行

-v可以借用此方式从shell变量中引入
a=root
awk -v var=$a -F\':\' \'$1==varprint $1\' passwd
a= whoami ; awk -v var=$a -F\':\' \'$1==varprint $3,$6\' /etc/passwd

FS 定义字段分隔符,默认为一个空格
OFS 输出的字段分隔符,默认为一个空格

root-0-root
bin-1-bin

root@@0##root
bin@@1##bin
RS 记录分隔符,默认为一个换行符
head -2 /etc/passwd | awk \'BEGIN RS=":"print\' 把:号换成了换行符
ORS 输出的记录分隔符,默认为一个换行符
head -2 /etc/passwd | awk \'BEGIN ORS="-"print\' 把换行符换成了 - 号
FILENAME 文件名
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 输出系统环境变量

root

linux awk命令怎么用?

awk命令是Alfred Aho, Peter Weinberger, Brian Kernighan三位作者联合开发的,用于Linux/Unix中处理数据和产生报告。awk命令功能十分强大,可根据需要抓取、截取指定的列或行。
首先在/mnt目录下创建示例文本文件f1,其内容如下:
1 hello hello
2 data data
3 xyz abc
4 123 789
5 ftp
6 Apache
7 apache
然后,使用awk对f1文件内容进行处理,举例如下。
①awk -F " " 'print $2,$3' f1:截取显示文档的第二列和第三列,-F指定分隔符为空格,$表示显示第几列。其中print表示要做输出信息的动作,$2和$3表示要输出的列号,awk要求将print已经输出列等内容放在“''”之间。
②awk -F " " '($1>3)print $2,$3' f1:选取第一列的值大于3的行,显示其第二列和第三列,在“()”中指定筛选条件。
③awk 'NR==4 || NR==3' f1:显示第三行和第四行,NR表示行号。
④awk '/data/ print $2' f1:抓取包含指定字符的行,再对列进行截取。此例中,awk先按照“data”字符串对文件f1中的行筛选,找出包含“data”的行以后,再按照默认的空格作为分隔符对行的内容做切割,仅打印出第二列的内容。
⑤awk '$2 ~ /data/ ' f1:抓取第二列包含指定字符的行。其中“~”表示是否匹配指定的“data”,如果第二列的内容包含“data”就打印出整行内容。
⑥awk '$2 !~ /data/ ' f1:抓取第二列不包含指定字符的行。其中“!~”表示是否不匹配指定的“data”,如果第二列的内容不包含“data”就打印出整行内容。
参考技术A awk:用于一行中分成数个“字段”来处理。适合处理 小型数据。
运行模式:awk '条件类型1动作1 条件类型2动作2 ...' filename

# last | awk 'print $1 "\t" $3' <== 查看登录者的数据,只显示登录名和ip地址,并以[tab]隔开

awk 的内置变量
变量名称 代表的含义

NF 每一行($0)拥有的字段总数

NR 当前 awk 所处理的是 “第几行” 数据

FS 当前分隔符,默认空格键

awk 的逻辑运算符
运算单元 代表含义
> 大于
< 小于
>= 大于或等于
<= 小于或等于
== 等于
!= 不等于

范例:
cat /etc/passwd | awk 'FS=":" $3 < 10 print $1 "\t" $3' <== 文件/etc/passwd是以":"分隔的,查看第三栏小于10的数据,并且只显示帐号与第三栏

以上是我对awk的总结,希望对你有帮助,是我写的哦,不是复制的。本回答被提问者采纳
参考技术B

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk有三个不同的版本:awk、nawk和gawk,未作特别说明,一般指gawk,gawk是awk的GNU版本。

之所以叫awk是因为其取了三位创始人Alfred Aho,Peter Weinberger,和Brian Kernighan的Family Name
的首字符。

使用方法:

awk'pattern+action'filenames

尽管操作可能会很复杂,但语法总是这样,其中pattern表示awk在数据中查找的内容,而action是在找到匹配内容时所执行的一系列命令。花括号()不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。pattern就是要表示的正则表达式,用斜杠括起来。

awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。

通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

调用awk的三种方式

1、命令行方式

awk[-F field-separator]'commands'input-file(s)

其中,commands是真正awk命令,[-F域分隔符]是可选的。input-file(s)是待处理的文件。

在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

2、shell脚本方式

将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。

相当于shell脚本首行的:#!/bin/sh

可以换成:#!/bin/awk

3、将所有的awk命令插入一个单独文件,然后调用:

awk-f awk-script-file input-file(s)

其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。

参考技术C awk 'print $1,$2,$3,$4,$5' emp_names 参考技术D 有本书叫《sed&awk》可看看。

以上是关于awk 命令的主要内容,如果未能解决你的问题,请参考以下文章

Linux入门系列——awk命令详解

如何在Linux中使用awk命令

shell命令三剑客之awk命令详解,cut命令,linux里记录行踪(操作记录)

利用awk命令进行统计

linux awk命令怎么用?

linux awk命令怎么用?