shell脚本详解(十一)——awk文本和数据处理编程语言

  • 一、awk命令 – 文本和数据进行处理的编程语言
    • 1、工作原理
    • 2、命令格式
    • 3、awk常见的内建变量(可直接使用)
    • 4、按行输出文本
    • 5、按字段输出文本
    • 6、通过管道、双引号调用 Shell 命令
    • 7、getline
  • 二、简单例题:提取本机IP地址,并进行二进制的转换输出
    • 方法一:
    • 方法二(函数+可交互版)

一、awk命令 – 文本和数据进行处理的编程语言

  • awk命令是一种编程语言,用于在linux/unix下对文本和数据进行处理。
  • 而且它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。

1、工作原理

  • 逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。

  • sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符“&&”表示“与”、“||”表示“或”、“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。

2、命令格式

3、awk常见的内建变量(可直接使用)

内建变量 说明
FS 列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同
NF 当前处理的行的字段个数
NR 当前处理的行的行号(序数)
$0 当前处理的行的整行内容
$n 当前处理行的第n个字段(第n列)
FILENAME 被处理的文件名
RS 行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是’\n’

4、按行输出文本

  • BEGIN模式表示,在处理指定的文本之前,需要先执行BEGIN模式中指定的动作;awk再处理指定的文本,之后再执行END模式中指定的动作,END{}语句块中,往往会放入打印结果等语句。

5、按字段输出文本

6、通过管道、双引号调用 Shell 命令

7、getline

  • 当getline左右无重定向符“<”或“|”时,getline作用于当前文件,读入当前文件的第一行给其后跟的变量var或$0;应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的。
  • 当getline左右有重定向符“<”或“|”时,getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。

二、简单例题:提取本机IP地址,并进行二进制的转换输出

方法一:

#获取IP
ifconfig | awk '(NR==2) {print $2}'#分字段操作
ifconfig |awk '(NR==2) {print $2}' | awk 'BEGIN {RS="."} ; {print} ' #对分段后的IP地址赋值给一个变量
x=`ifconfig |awk '(NR==2) {print $2}' | awk 'BEGIN {RS="."} ; {print} '`#进行外层循环,四次
for a in $x
do#进行内循环,选用减法进行循环,如果外层循环的值比被减数大,则取余数,并输出1;反之则输出0,且不取减法结果。   for ((i=1;i<=255;i+=$i))dom=$[128/$i]sum=$[$a-$m]if [ $a -ge $m ]thena=$[$a-$m]echo -n "1"  #不换行输出elseecho -n "0"  #不换行输出fidoneecho  " "  #进行系统默认的空格换行操作
done   > 123.txt#进行结果的输出,并把结果中的空格全部替换成 "."号 IP="`cat 123.txt`"
echo $IP | sed 's/ /./g'

方法二(函数+可交互版)

#!/bin/bash
#定义一个函数,使用位置变量来进行操作
ip(){
x=`echo $1 | awk 'BEGIN {RS="."} ; {print} '`
for a in $x
do#进行内循环,选用减法进行循环,如果外层循环的值比被减数大,则取余数,并输出1;反之则输出0,且不取减法结果。for ((i=1;i<=255;i+=$i))dom=$[128/$i]sum=$[$a-$m]if [ $a -ge $m ]thena=$[$a-$m]echo -n "1" elseecho -n "0"  fidoneecho  -e "\t"
done
}##############################read -p "请输入想要转换的IP地址:" p    #定义交互式变量P
list="`ip $p`"                       #把调用函数后得出的结果放入列表中
echo $list | sed 's/ /./g'            #输出列表,并对分隔符进行替换

shell脚本详解(十一)——awk文本和数据处理编程语言相关推荐

  1. shell脚本详解(十)——sed编辑器的使用方法

    shell脚本详解(十)--sed编辑器的使用方法 一.sed编辑器 二.sed编辑器工作流程 1.读取: 2.执行: 3.显示: 4.注: 三.命令格式 四.常用选项 五.常用操作 六.使用地址 s ...

  2. shell脚本详解(七)——正则表达式、sort、uniq、tr

    shell脚本详解(七)--正则表达式.sort.uniq.tr 一.排序命令--sort 1.格式 2.常用选项 3.示例 二.去除重复行操作命令--uniq 1.格式 2.常用选项 3.示例 三. ...

  3. shell脚本详解(一)——初学shell脚本必看哦

    shell脚本详解 一.Shell脚本概述 1.1.shell脚本的概念 1.2.shell脚本应用场景 1.3.shell脚本能干什么 1.4. shell的作用--命令翻译器,"翻译官& ...

  4. shell脚本详解(十二)——Here Document免交互及Expect自动化交互

    shell脚本详解(十二)--Here Document免交互及Expect自动化交互 一.Here Document 免交互 1.格式 2.注意事项 3.免交互方式实现对行数的统计,将要统计的内容置 ...

  5. shell脚本详解(九)——一键部署DNS正向解析

    shell脚本详解(九)--一键部署DNS正向解析 一.DNS正向解析 二.shell脚本一键部署 一.DNS正向解析 详情请点击:DNS正向解析 二.shell脚本一键部署 #!/bin/bash ...

  6. shell脚本详解(六)——数组简介和排序算法

    shell脚本详解(六)--数组简介和排序算法 一.数组 1.数组的定义方法 ①.方式一: ②.方式二: ③.方式三: ④.方式四: 2.数组包括的数据类型 3.获取数组长度 4.获取数据列表 5.读 ...

  7. shell脚本详解(四)——循环语句之while循环和until循环(附加例题及解析)

    shell脚本详解(四)--循环语句之while循环和until循环 一.until循环 1.循环结构 2.例题 二.while循环 1.循环结构 2.例题(每个人的思路不同,会导致脚本内容不一样,这 ...

  8. shell脚本详解(三)——循环语句之for循环

    shell脚本详解(三)--循环语句之for循环 一.echo命令 – 输出字符串或提取Shell变量的值 1.格式 2.常用参数 3.示例 二.for循环语句 1.for循环结构 2.例题 ①.例题 ...

  9. shell脚本详解(二)——条件测试、if语句和case分支语句

    shell脚本详解(二)--条件测试.if语句和case分支语句 一.条件测试 1.test命令 2.文件测试 3.整数值比较 4.字符串比较 5.逻辑测试 二.if条件语句 1.单分支 2.双分支 ...

最新文章

  1. python argv 详解_对python中的argv和argc使用详解
  2. linux下杀死进程(kill)的N种方法
  3. linux修改文件没有备份,归档模式,恢复没有备份的数据文件
  4. SQL Tuning Advisor使用实例
  5. 2018-02-03-PY3下经典数据集iris的机器学习算法举例-零基础
  6. c语言简易计算器大作业报告,简易计算器 (C语言)作业
  7. mhdd测试hdd硬盘软件,硬盘检测工具(HDDScan)
  8. Ubuntu 使用 xdg-open 命令
  9. Python批量删除docx文档中所有页眉和页脚
  10. C语言(一):C语言概述介绍
  11. tailscale自建derper服务器中转,使用自定义端口
  12. 互联网公司那些价值观-阿里巴巴
  13. 微信小程序开发01 双线程模型:为什么小程序不用浏览器的线程模型?
  14. 简单粗暴理解与实现机器学习之K-近邻算法(三):距离度量、欧氏距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、标准化距离、余弦距离、汉明距离、杰卡德距离、马氏距离
  15. Springboot毕设项目企业财务管理系统lmm93java+VUE+Mybatis+Maven+Mysql+sprnig)
  16. Gradle学习之Android-DSL AppExtension篇
  17. FluentData
  18. android 查看设备 x86,有了它 x86安卓设备就能用Windows软件了
  19. 1 0.99999的悖论_宇宙年龄只有138亿年,宽度却有930亿光年,这是悖论吗?
  20. mysql禁止空密码登录_PhpMyadmin空密码登录被禁止登录问题解决办法

热门文章

  1. 20210813 数据摆渡、DNS、分布式、分布式数据库、防ddos攻击、链路负载均衡
  2. 微信小程序 漂亮的按钮 多颜色+动画效果,超好看的button 样式
  3. Mac小技巧:如何在当前目录快速打开终端iTerm2并定位至当前目录
  4. 一句话讲解深度学习算法
  5. 搞定mysql的 行转列(7种方法) 和 列转行
  6. X里、X迅、X团、X度、X手的面试总结
  7. XP系统自动修复命令(sfc)详解
  8. 计算机辅助项目管理课程方案,project计算机辅助项目管理课程报告-20210323010453.docx-原创力文档...
  9. MWC 2019|5G时代促进多产业融合 折叠手机令人瞩目
  10. js面试题 高频 含答案