shell编程awk命令详细介绍

20 篇文章 0 订阅

awk 截取(gawk gnu awk)

语法

awk 'BEGIN{commands}pattern{commands}END{commands}'file1

[root@host emm]# awk -F: 'BEGIN{print"########start###########"}$3>500&&$3<2000{print $1,$3} END{print"###end###"}' /etc/passwd
#num=0定义变量
#预定义变量↓
#NR number of record 行号
#NF number of field 字段数
#length() 内置的函数,用来统计字符串的长度
#$NF 最后一个字段

awk -F":" '{print #1,$2}' /etc/passwd
#print是awk内部的命令,用于输出
#, 引用输出分隔符,默认输出分隔符是1个空格
[root@host emm]# awk -F: 'OFS="#"{print $1,$1,$3}' /etc/passwd|head -2
root#root#0
bin#bin#1
#指定分隔符
[root@host emm]# awk -F: '/^[^h]/{print $1}' /etc/passwd
#不显示以h开头的行的第一列
[root@host emm]# awk -F:'[:/]' '{print $1}' /etc/passwd
#以:或者/为分隔符
[root@host emm]#awk -F"[ :]+" '{print $2}' 文件
#连续的空格和:当作一个分割符号
#tr -s ""将连续的空格压缩成一个空格
  • -F 指定输入分隔符,默认的分隔符是空白(空格+tab,enter)

  • OFS指定输出分割符,OFS=“#”(output field separater)

  • FS指定输入分隔符 aw8、k 'FS=":" {print $1}' /etc/passwd

数据格式字段

awk命令的操作符

  • ~波浪号表示匹配后面的模式(模糊匹配)

awk使用shell

name=mengmeng
useradd mengmeng
useradd mengmeng1
useradd mengmeng2
[root@host lianxi]# awk -F: "\$0 ~/$name/ {print \$0}" /etc/passwd
mengmeng:x:2017:2017::/home/mengmeng:/bin/bash
mengmeng1:x:2018:2018::/home/mengmeng1:/bin/bash
mengmeng2:x:2019:2019::/home/mengmeng2:/bin/bash

awk 中的字段求和

[root@host lianxi]# awk 'NR>1{sum+=$3}END{print sum}' grade.txt 
240

awk的内置函数length,substr

统计没有设置密码的用户的数量,同时输出用户名 /etc/shadow

[root@host lianxi]# awk -F: 'length($2)<=2 {print $1;sum++}END{print sum}' /etc/shadow

统计没有设置密码的用户的数量,同时输出用户名前两个字符 /etc/shadow

[root@host lianxi]# awk -F: 'length($2)<=2 {print substr($1,1,2);sum++}END{print sum}' /etc/shadow

awk的if语句

#一个判断语句放在外面
[root@host lianxi]# cat /etc/passwd|awk -F: 'length($1)==3{print $0}'
#使用if放在{}里面
[root@host lianxi]# cat /etc/passwd|awk -F: '{if (length($1)==3) print $0}'
#if双分支
[root@host lianxi]# cat /etc/passwd|awk -F: '{if (length($1)==3) print $0; else print $1}'

awk里的数组

[root@host lianxi]# awk -F: '{user[$1]=$3}END{for (i in user) print user[i]}' /etc/passwd
[root@host lianxi]# awk '{vote[$1]+=$3}END{for (i in vote) print i,vote[i]}' vote.txt |sort -k 2 -n
河南 6
江西 9
山东 12
湖南 43
#i是key,user[i]就是对应里面的值,sort -k根据第2个字段排序,-n升序 -rn降序

awk的system

awk的split

[root@host 7_6]# ip add|awk '/inet.*ens[0-9]+$/{split($2,ip,"/")}END{for (i in ip) print i,ip[i]}'

awk 的tolower和toupper

[root@host 7_6]# awk -F: '{print toupper($1)}' /etc/passwd

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: awk是一种强大的文本处理工具,它可以根据指定的分隔符将文本文件的每一行分割成不同的字段,并对这些字段进行处理。在awk中,$1、$2、$3等表示行(记录)中的不同字段,$0表示整个行(记录)。默认情况下,awk使用空格作为分隔符,但也可以通过在命令行中使用“-F 分隔符”的形式来指定分隔符。\[1\] 举例来说,可以使用awk来筛选和处理passwd文件中的内容。例如,可以使用以下命令来找到passwd文件中第一域匹配root的部分并输出该行: awk 'BEGIN {FS=":"} $1~/root/' passwd 还可以使用awk来找到passwd文件中全部域匹配root的部分并输出该行: awk 'BEGIN {FS=":"} $0~/root/' passwd 另外,可以使用awk来找到passwd文件中全部域不匹配home的部分并输出该行: awk 'BEGIN {FS=":"} $0!~/home/' passwd 这些例子展示了awk在文本处理中的灵活性和强大功能。通过指定不同的条件和操作,可以实现各种文本处理任务。\[3\] #### 引用[.reference_title] - *1* [【linuxShell 编程 awk 命令详解](https://blog.csdn.net/sirria1/article/details/126768903)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [shell中的awk命令](https://blog.csdn.net/nigar_/article/details/104336992)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值