Linux - awk 命令 快速学习

这篇具有很好参考价值的文章主要介绍了Linux - awk 命令 快速学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

awk会对数据流(可以是系统的文件, 网络的文件, 管道流)的每一行, 以某个分隔符分割,进行处理并输出内容. 

[root@iZwz9euj2j1u3uw9bv632sZ sea]# awk -F: '{print $1,$3}' /etc/passwd | head -5
root 0
bin 1
daemon 2
adm 3
lp 4

-F:  以:分割字符串,等于 -F ":"

'{}'  运行代码

print  输出

$1,$3  分隔之后的第一和第三个字符,中间是逗号, 输出分隔默认是空格

管道命令, 作为后面命令的输入流

head -5 显示前面5条数据

创建测试文件

vi fruit
apple 450
pear 600
peach 899
juice 200
strawberry 800
grage 300
kiwi 100
banana 400
watermelon 659
plun 300
cherry 329
orange 789
mango 430
lemon 854
pineapple 439
[root@iZwz9euj2j1u3uw9bv632sZ sea]# awk '{print $1,$2}' fruit
apple 450
pear 600
peach 899
juice 200
strawberry 800
grage 300
kiwi 100
banana 400
watermelon 659
plun 300
cherry 329
orange 789
mango 430
lemon 854
pineapple 439

去掉-F:, 默认是" "作为分隔符

[root@iZwz9euj2j1u3uw9bv632sZ sea]# awk 'BEGIN{print "####start####"}{print $1,$2}END{print "####end####"}' fruit
####start####
apple 450
pear 600
peach 899
juice 200
strawberry 800
grage 300
kiwi 100
banana 400
watermelon 659
plun 300
cherry 329
orange 789
mango 430
lemon 854
pineapple 439
####end####

BEGIN 对每行输出之前执行的代码, 必须大写, 用{}包含, 输出的文字必须用双引号

END 对每行输出之后执行的代码, 必须大写, 用{}包含, 输出的文字必须用双引号

[root@iZwz9euj2j1u3uw9bv632sZ sea]# awk 'BEGIN{print "####start####"} OFS="##"{print $1,$2} END{print "####end####"}' fruit
####start####
apple##450
pear##600
peach##899
juice##200
strawberry##800
grage##300
kiwi##100
banana##400
watermelon##659
plun##300
cherry##329
orange##789
mango##430
lemon##854
pineapple##439
####end####

OFS="##" 输出的时候以##为分隔符, 必须有双引号

[root@iZwz9euj2j1u3uw9bv632sZ sea]# awk '$2 > 300 {print $1,$2}' fruit
apple 450
pear 600
peach 899
strawberry 800
banana 400
watermelon 659
cherry 329
orange 789
mango 430
lemon 854
pineapple 439

$2 > 300 可以对数据进行逻辑判断, 第二个数据大于300.

[root@iZwz9euj2j1u3uw9bv632sZ sea]# awk '{if($2<200) print $1"价格便宜";else if($2<600) print $1"价格还可以";else print $1"价格很贵"}' fruit
apple价格还可以
pear价格很贵
peach价格很贵
juice价格还可以
strawberry价格很贵
grage价格还可以
kiwi价格便宜
banana价格还可以
watermelon价格很贵
plun价格还可以
cherry价格还可以
orange价格很贵
mango价格还可以
lemon价格很贵
pineapple价格还可以

if(判断语句) 执行语句;else if(判断语句) 执行语句;else 执行语句;

执行语句后面必须跟逗号, 输出字符串必须用双引号.

[root@iZwz9euj2j1u3uw9bv632sZ sea]# awk '{if($2<200) {print $1"价格便宜";num1++;}else if($2<600) {print $1"价格还可以";num2++;}else{print $1"价格很贵";num3++;}}END{print "价格便宜有"num1"个, 价格还可以的有"num2"个, 价格贵的有"num3"个"}' fruit
apple价格还可以
pear价格很贵
peach价格很贵
juice价格还可以
strawberry价格很贵
grage价格还可以
kiwi价格便宜
banana价格还可以
watermelon价格很贵
plun价格还可以
cherry价格还可以
orange价格很贵
mango价格还可以
lemon价格很贵
pineapple价格还可以
价格便宜有1个, 价格还可以的有8个, 价格贵的有6个

if(判断语句) {执行语句;}else if(判断语句) {执行语句;}else {}执行语句;}

一条执行语句是省略了大括号

#最受欢迎的城市投票
vi vote
湖南 3
北京 2
广东 3
上海 5
深圳 2
安徽 2
云南 8
贵州 3
广东 4
北京 4
上海 2
安徽 7
[root@iZwz9euj2j1u3uw9bv632sZ sea]# awk '{vote[$1]+=$2}END{for (i in vote) print i,vote[i]}' vote | sort -k 2 -nr
安徽 9
云南 8
广东 7
上海 7
北京 6
贵州 3
湖南 3
深圳 2

vote[$1]+=$2 定义一个vote数组, 数组的下标是城市, 值是城市投票

for (变量 in 数组) 循环数组中的数据

sort -k 2 -nr  == sort -t ' ' -k 2 -nr

-t ' ' 默认根据空格分隔, 可以省略

-k 2 取第二个数据

-n 转换成integer

-r 升序, 默认是降序

[root@iZwz9euj2j1u3uw9bv632sZ sea]# awk -F: '$7 ~ /bash/ {print $1,$3,$7}' /etc/passwd
root 0 /bin/bash
admin 1000 /bin/bash
u1 400 /bin/bash

$7 ~ /bash/ ~ 匹配就/bash/就返回true, bash后面必须加/

[root@iZwz9euj2j1u3uw9bv632sZ sea]# awk -F: '$7 ~ /bash/ {print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
admin:x:1000:1000::/home/admin:/bin/bash
u1:x:400:1002::/home/u1:/bin/bash

$0 原来整行的数据

[root@iZwz9euj2j1u3uw9bv632sZ sea]# awk '$2 > 300 {printf "%s %s\n", $0,"TRUE"}  $2<=300 {print $0}' fruit
apple 450 TRUE
pear 600 TRUE
peach 899 TRUE
juice 200
strawberry 800 TRUE
grage 300
kiwi 100
banana 400 TRUE
watermelon 659 TRUE
plun 300
cherry 329 TRUE
orange 789 TRUE
mango 430 TRUE
lemon 854 TRUE
pineapple 439 TRUE

%s  字符串占位符, 第一个%s输出行数据, 接着空格, 第二个字符串输出"TRUE", 

\n 换行

"%s %s\n" 必须用双引号

[root@iZwz9euj2j1u3uw9bv632sZ sea]# awk 'NR > 5&&NR<10 {print NR,$1,$2}' fruit
6 grage 300
7 kiwi 100
8 banana 400
9 watermelon 659

NR 当前行
 

[root@iZwz9euj2j1u3uw9bv632sZ sea]# user_name=jesse
[root@iZwz9euj2j1u3uw9bv632sZ sea]# echo | awk -v name=$user_name '{print name}'
jesse

-v 把环境变量赋值name, 使用环境变量必须用$.

vi aw.sh
#!/bin/bash
awk -v var=$1 'var==$1{print NR,$0;}' fruit

[root@iZwz9euj2j1u3uw9bv632sZ sea]# ./aw.sh apple pear
1 apple 450

var=$1  $1表示执行bash程序传入的第一个参数, 赋值给var

var==$1 分隔后的第一个字符串和变量var比较

[root@iZwz9euj2j1u3uw9bv632sZ sea]# awk '$2>400 {print substr($1,1,3)}' fruit
app
pea
pea
str
wat
ora
man
lem
pin

substr($1,1,3)  第一个字符开始, 取长度3个字符.文章来源地址https://www.toymoban.com/news/detail-599544.html

到了这里,关于Linux - awk 命令 快速学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux命令三剑客grep、sed、awk

    准备 grep、sed、awk号称\\\"linux三剑客\\\",使用频繁,功能强大,本文通过一个实例演示下基本用法。首先准备一个文本文件,命名为text.txt,写入文件内容: grep 首先,最简单的是grep。经常用来过滤查看日志。对于grep需要知道如下几个常用的命令选项: -n: 额外输出行号。例如过

    2024年02月05日
    浏览(83)
  • 【嵌入式开发 Linux 常用命令系列 7 -- awk 常用方法】

    上篇文章:嵌入式开发 Linux 常用命令系列 6 – 字符提取 cut 命令使用 下篇文章:嵌入式开发 Linux 常用命令系列 8 – 二进制转为16进制常用命令 AWK是一种强大的文本分析工具,最初是由 Aho, Weinberger 和 Kernighan 设计和实现的,AWK 的名称就来源于他们三人的姓氏首字母。在Lin

    2024年02月15日
    浏览(60)
  • Linux:管道命令与文本处理三剑客(grep、sed、awk)

    众所周知,bash命令执行的时候会输出信息,但有时这些信息必须要经过几次处理之后才能得到我们想要的格式,此时应该如何处置?这就牵涉到 管道命令(pipe) 了。管道命令使用的是 | 这个界定符号。另外,管道命令与连续执行命令是不一样的,这点下面我们会说明。 我们先

    2023年04月18日
    浏览(53)
  • 【Linux】ps -ef|grep -v grep|awk ‘{print $2}‘ 命令详解

    第一步:grep -v grep grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 ps -ef|grep java 就是通过管道的方式,将 ps 命令查询出来的进程信息内容筛选出

    2024年02月14日
    浏览(44)
  • Linux Ubuntu20.04深度学习环境快速配置命令记录

    1、更新系统包 2、安装显卡驱动 使用apt方式安装驱动,多数情况不容易成功, 使用一下方法更佳: 1.查看合适显卡的驱动版本 NVIDIA GeForce 驱动程序 - N 卡驱动 | NVIDIA NVIDIA GeForce 驱动程序官方提供下载最新版的 Geforce 驱动程序,可提升 PC 游戏体验和应用程序速度。更多关于更

    2024年02月09日
    浏览(60)
  • 在平板/手机上运行Linux(无需root),学习Linux命令行。(快速方法+详细图文+Ubuntu举例)

    本文将讲述,如何在平板/手机设备上通过强大的Termux安装Linux系统(命令行界面),进行学习Linux命令行和Linux实践。举例安装Ubuntu 22.04,CentOS等。本人使用的是Matepad pro(鸿蒙3.0),安卓设备推荐Android 7.0以上。(若要想体验Linux桌面,需要在最后进行多两步操作,但鉴于在平

    2024年02月09日
    浏览(60)
  • Linux持续学习者的必备工具:文本处理神器awk

    作为一名Linux持续学习者,我们经常需要处理各种各样的文本文件,例如日志文件、配置文件等。而对于大规模的文本数据,手动处理往往效率低下且容易出错。那么,有没有一种快速而强大的工具可以帮助我们进行文本处理呢?答案就是awk!本文将为你介绍awk的基本使用方

    2024年02月10日
    浏览(41)
  • 【嵌入式开发 Linux 常用命令系列 7.4 -- awk 处理文件名,去除后缀只保留文件名】

    请阅读 【嵌入式开发学习必备专栏 】 在 shell 中, 可以使用 awk 来处理文件名,去除其后缀。下面是一个示例命令,它会将带有后缀的文件名作为输入,并输出没有后缀的文件名: 这个命令片段做了以下几件事情: -F\\\".\\\" 设置了输入字段的分隔符为点号( . ),这是文件后缀

    2024年04月08日
    浏览(63)
  • 快速上手Linux核心命令(十一):Linux用户相关命令

    目录 前言 useradd 创建用户 usermod 修改用户信息 userdel 删除用户 groupadd 创建新的用户组 groupdel 删除用户组 passwd 修改用户密码 chage 修改用户密码有效期 批量更新用户密码 su 切换用户 visudo 编辑sudoers文件 sudo 以另一个用户身份执行命令 id 显示用户与用户组信息 w 显示已登录用

    2024年02月03日
    浏览(48)
  • 快速上手Linux核心命令(七):Linux系统信息相关命令

    目录 前言 uname 显示系统信息 hostname 显示或设置系统主机名 du 统计磁盘空间使用情况 echo 显示一行文本 watch 监视命令执行情况 stat whereis 显示命令及其相关文件的全路径 date 显示与设置系统时间 which 显示命令全路径 locate 快速定位文件路径 这期呢主要说一说Linux中与系统相关

    2023年04月27日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包