问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux awk命令

发布网友 发布时间:2022-04-23 05:54

我来回答

2个回答

热心网友 时间:2022-04-10 13:32

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

二. awk命令格式和选项
2.1 awk的语法有两种形式
1. 命令行方式
  awk [-F field-separator] 'commands' input-file(s)
  其中,commands是真正awk命令,[-F域分隔符]是可选的。input-file(s)是待处理的文件。
  在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。
  2. 将所有的awk命令插入一个单独文件,然后调用:
  awk -f awk-script-file input-file(s)
  其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。
2.2 命令选项
(1)-F fs or --field-separator fs :指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
(2)-v var=value or --asign var=value :赋值一个用户定义变量。
(3)-f scripfile or --file scriptfile :从脚本文件中读取awk命令。
(4)-mf nnn and -mr nnn :对nnn值设置内在*,-mf选项*分配给nnn的最大块数目;-mr选项*记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
(5)-W compact or --compat, -W traditional or --traditional :在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
(6)-W copyleft or --copyleft, -W copyright or --copyright :打印简短的版权信息。
(7)-W help or --help, -W usage or --usage :打印全部awk选项和每个选项的简短说明。
(8)-W lint or --lint :打印不能向传统unix平台移植的结构的警告。
(9)-W lint-old or --lint-old :打印关于不能向传统unix平台移植的结构的警告。
(10)-W posix :打开兼容模式。但有以下*,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。
(11)-W re-interval or --re-inerval :允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。
(12)-W source program-text or --source program-text :使用program-text作为源代码,可与-f命令混用。
(13)-W version or --version :打印bug报告信息的版本。
三. 使用方法
#awk '{pattern + action}' {filenames}
尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。
awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。
 通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。
四. 模式和操作
awk脚本是由模式和操作组成的:
    pattern {action} 如$ awk '/root/' test,或$ awk '$3 < 100' test。
 两者是可选的,如果没有模式,则action应用到全部记录,如果没有action,则输出匹配全部记录。默认情况下,每一个输入行都是一条记录,但用户可通过RS变量指定不同的分隔符进行分隔。
4.1. 模式
模式可以是以下任意一个:
(1)正则表达式:使用通配符的扩展集。
(2)关系表达式:可以用下面运算符表中的关系运算符进行操作,可以是字符(3)串或数字的比较,如$2>%1选择第二个字段比第一个字段长的行。
(4)模式匹配表达式:用运算符~(匹配)和~!(不匹配)。
(5)模式,模式:指定一个行的范围。该语法不能包括BEGIN和END模式。
(6)BEGIN:让用户指定在第一条输入记录被处理之前所发生的动作,通常可在这里设置全局变量。
(7)END:让用户在最后一条输入记录被读取之后发生的动作。
4.2. 操作
 操作由一人或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内。主要有四部份:
(1)变量或数组赋值
(2)输出命令
(3)内置函数
(4)控制流命令

五. awk的环境变量

六. awk运算符

七. 记录和域
7.1. 记录
   awk把每一个以换行符结束的行称为一个记录。
   记录分隔符:默认的输入和输出的分隔符都是回车,保存在内建变量ORS和RS中。
   $0变量:它指的是整条记录。如$ awk '{print $0}' test将输出test文件中的所有记录。
   变量NR:一个计数器,每处理完一条记录,NR的值就增加1。
   如$ awk '{print NR,$0}' test将输出test文件中所有记录,并在记录前显示记录号。
7.2. 域
记录中每个单词称做“域”,默认情况下以空格或tab分隔。awk可跟踪域的个数,并在内建变量NF中保存该值。如$ awk '{print $1,$3}' test将打印test文件中第一和第三个以空格分开的列(域)。
7.3. 域分隔符
   内建变量FS保存输入域分隔符的值,默认是空格或tab。我们可以通过-F命令行选项修改FS的值。如$ awk -F: '{print $1,$5}' test将打印以冒号为分隔符的第一,第五列的内容。
   可以同时使用多个域分隔符,这时应该把分隔符写成放到方括号中,如$awk -F'[:/t]' '{print $1,$3}' test,表示以空格、冒号和tab作为分隔符。
   输出域的分隔符默认是一个空格,保存在OFS中。如$ awk -F: '{print $1,$5}' test,$1和$5间的逗号就是OFS的值。
八. 匹配操作符(~)
   用来在记录或者域内匹配正则表达式。如$ awk '$1 ~/^root/' test将显示test文件第一列中以root开头的行。
九. 比较表达式
   conditional expression1 ? expression2: expression3,
   例如:
   $ awk '{max = {$1 > $3} ? $1: $3: print max}' test。如果第一个域大于第三个域,$1就赋值给max,否则$3就赋值给max。
   $ awk '$1 + $2 < 100' test。如果第一和第二个域相加大于100,则打印这些行。
   $ awk '$1 > 5 && $2 < 10' test,如果第一个域大于5,并且第二个域小于10,则打印这些行。
十. 范围模板
范围模板匹配从第一个模板的第一次出现到第二个模板的第一次出现之间所有行。如果有一个模板没出现,则匹配到开头或末尾。如$ awk '/root/,/mysql/' test将显示root第一次出现到mysql第一次出现之间的所有行。

热心网友 时间:2022-04-10 14:50

-F选项指定分隔符,你用的是'a',所以对于第一行abcabcabcabc
a分割后分成以下几个域:空 | bc | bc | bc | bc
对应关系为 :$1 $2 $3 $4 $5
print $3打印第三个域:bc
print $2打印第二个域:bc
print $1打印第一个域:空

第二行:vivi,abc,abc,abc
分割后:vivi, | bc, | bc, | bc
对应为:$1 $2 $3 $4
打印第三个域:bc,
打印第二个域:bc,
打印第一个域:vivi,

第三行:12345a,a---a;a
分割后:12345 | , | --- | ; | 空
对应为: $1 $2 $3 $4 $5
打印第三个域:---
打印第二个域:,
打印第一个域:12345
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
武汉大学在职研究生考试科目有哪些 报考武汉大学在职研究生录取率高吗? 武汉大学mpa在职研究生好考吗 忘记车子买哪家保险 怎么查 67年的羊和什么生肖最配夫妻 67年的羊和69年鸡相配吗? 67年羊男与69年鸡女同是11月出生婚配如何? 67年9月和69年十月的结婚 “新菊亦侵篱”的出处是哪里 “闲绕篱头看菊花”的出处是哪里 linux中awk是什么命令,具体怎么使用?最好有实例。 LINUX系统怎么使用awk命令实现下述操作 linux脚本中awk是什么awk后面接的NR是什么意思 Linux里面AWK begin作用是什么? linux下 awk命令问题 无精子症如何治疗 巧克力可以多吃吗? 巧克力吃了的好处 Linux:awk指令的执行顺序是这样的吗 男性无精症治疗最好的办法和技术是哪种? linux awk 如何只输出指定行 巧克力吃了到底有什么好处没有? Linux awk命令问题 中医如何治疗无精症 LINUX awk 语句 awk &#39; { SUM += $1 } END { print SUM }&#39;请问这个要怎么理解,需详细 无精症治疗需要多久能好 吃巧克力有什么好处。? awk &#39;{print $2}&#39; 这个命令是什么意思? 查出无精症,请问怎么样治疗比较好? 巧克力一次吃多少合适? 在awk中怎样执行linux命令 微信好友被删了,自己又不知道他的了。怎么找回? 删除微信好友不记得怎么加回来? 微信好友删除了怎么找回,不记得他和名字了 微信删除的好友怎么找到,没有了? 我把好友的删了可以找回来吗 怎么找回已删除的微信好友的 怎么恢复删除的好友 也没有 手机号QQ号也没有 梦见多年未见的异性初中同学? 梦见多年不见的同学什么意思? 总是梦见一个很久不联系的小学同学(异性) 突然梦见一个很久不联系的异性同学,异性同学等了自己很久喜欢自己很久_百度问一问 梦见好久没见过的异性同学在一起了是什么意思? 总是梦到多年未见的同学? 梦见多年不见的同学,是个女生。 梦见多年不见的异性老同学,还和他有暧昧关系,《上学的时候和他关系不是很好》, 梦见多年不见的老同学 同性女,请大师告诉我有没有什么寓意! 做梦梦到多年不见的同学的场景,见面时很亲切……(求高人解梦) 海洋中最毒的生物有哪些? 海洋生物最毒的有哪些