首页 > 编程知识 正文

linux 显示文件最后几行(linux awk if)

时间:2023-05-03 18:35:27 阅读:104938 作者:873

介绍

awk是一个处理文本文件的应用程序,几乎所有的Linux系统都自带这个程序。

它依次处理文件的每一行,并读取其中的每个字段。Awk可能是每行格式相同的文本文件(如日志和CSV)最方便的工具。

Awk不仅是工具软件,还是一种编程语言。然而,本文只介绍了它的命令行用法,这对于大多数场合来说应该足够了。

一、基本用法

awk的基本用法如下表。

#格式

$ awk操作文件名

#示例

$ awk“{ print $ 0 }”demo . txt

在上面的例子中,demo.txt是awk将处理的文本文件。前面的单引号里面有一个大括号,里面是每行的处理动作print $0。其中print是print命令,$0代表当前行,所以上面命令的执行结果是按原样打印出每一行。

接下来,让我们用标准输入(stdin)演示上面的例子。

“$ echo”这是一个测试“| awk”“{ print $ 0 }”

这是一个测试

在上面的代码中,print $0是将标准输入到这是一个测试中,然后再次打印。

Awk会根据空格和制表符把每一行分成几个字段,用$1、$2、$3来表示第一个字段、第二个字段、第三个字段等等。

“$ echo”这是一个测试“| awk”“{ print $ 3 }”

a

在上面的代码中,$3表示这是一个测试的第三个字段A。

接下来,例如,我们将/etc/passwd文件保存为demo.txt

root : x :0336003360 root :/root :/usr/ttdwbl/zsh

daemon : x :1:1: dame :/usr/sttdwbl :/usr/sttdwbl/nologin

ttdwbl : x :2:2: tdwbl :/ttdwbl :/usr/sttdwbl/nologin

sys: x :3: sys:/dev :/usr/sttdwbl/nologin

sync : x:4:655343360 sync :/ttdwbl :/ttdwbl/sync

该文件的字段分隔符是冒号(:),因此使用-F参数将分隔符指定为冒号。然后,可以提取第一个字段。

$ awk-F ' : ' ' { print $ 1 } ' demo . txt

守护进程

ttdwbl

[计]系统复制命令(system的简写)

同步

00-1010除了代表字段的$数字,awk还提供了一些其他变量。

变量NF指示当前行中有多少字段,因此$NF代表最后一个字段。

$ echo '这是一个测试' | awk '{print $NF} '

试验

$(NF-1)代表倒数第二个字段。

$ awk -F ':' '{print $1,$(NF-1)}' demo.txt

根/根

守护程序/usr/sttdwbl

ttdwbl /ttdwbl

系统/开发

sync /ttdwbl

在上面的代码中,print命令中的逗号表示输出时两个部分用空格隔开。

变量NR表示当前正在处理的行。

$ awk-F ' : ' ' { print NR ')' $ 1 } ' demo . txt

1)根

2)守护进程

3) ttdwbl

4)系统

5)同步

在上面的代码中,在print命令中,如果字符是按原样输出的,则应该用双引号引起来。

awk的其他内置变量如下。

FILENAME:当前文件名FS:字段分隔符,默认为空格和制表符。RS:行分隔符,用于划分每一行。默认为换行。OFS:输出字段的分隔符,用于在打印过程中分隔字段。默认值为空格。ORS:输出记录的分隔符,用于在打印过程中分隔记录。默认为换行。OFMT:数字输出的格式,默认为% %.6g。

二、变量

awk还提供了一些内置功能,方便原始数据的处理。

函数toupper()用于将字符转换为大写。

$ awk-F ' : ' ' { print to pper($ 1)} ' demo . txt

守护进程

快乐的西牛

[计]系统复制命令(system的简写)

同步

在上面的代码中,第一个字段以大写形式打印。

其他常用功能如下。

Tolower():字符被转换为小写。Length():返回字符串的长度。Substr():返回子字符串。Sin():正弦。Cos():余弦。Sqrt():平方根。Rand():一个随机数。awk内置功能的完整列表可以在手册中找到。

三、函数

awk允许您指定输出条件,并且只输出满足条件的行。

输出条件应该写在动作前面。

$ awk“条件动作”文件名

请看下面的例子。

$ awk-F ' : ' '/usr/{ print $ 1 } ' demo . txt

守护进程

ttdwbl

[计]系统复制命令(system的简写)

在上面的代码中,print命令前面有一个正则表达式,它只输出包含usr的行。

以下示例仅输出奇数行和第三行之后的行。

#输出奇数行

$ awk-F ' : ' ' NR % 2==1 { print $ 1 } ' demo . txt

ttdwbl

同步

#第三行之后的输出行

$ awk-F ' : ' ' NR 3 { print $ 1 } ' demo . txt

[计]系统复制命令(system的简写)

同步

以下示例输出第一个字段等于指定值的行。

$ awk-F ' : ' ' $ 1==' root ' { print $ 1 } ' demo . txt

$ awk-F ' : ' ' $ 1==' root ' | $ 1==' ttdwbl ' { print $ 1 } ' demo . txt

ttdwbl

四、条件

awk为编写复杂条件提供了if结构。

$ awk -F ':' '{if ($1 'm ')打印$1}' demo.txt

[计]系统复制命令(system的简写)

同步

上面的代码输出第一个字段的第一个字符大于m的行。

if结构也可以指定else部分。

$ awk -F ':' '{if ($1 'm ')打印$ 1;else print ' - '}' demo.txt

-

-

[计]系统复制命令(system的简写)

同步

关注Java知识堂,每天给你充足的干货。

原地址:http://www.ruanyifeng.com/blog/2018/11/awk.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。