awk命令取出某一行某一列(awk取第一行第一列)

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在对数据分析并生成报告时,显得尤为强大。

简单来说awk就是把文件逐行地读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk有三个不同的版本:awk、nawk和gawk,未作特别说明,一般指gawk,gawk是awk的GNU版本。

之所以叫awk是因为其取了三位创始人Alfred Aho,Peter Weinberger,和Brian Kernighan的Family Name的首字符。

awk格式:

格式: sed -n '3p' sed.txt 找谁干啥(条件动作) awk格式 39;NR==1{print $1,$3}' /etc/passwd awk 选项 '条件{动作}' /etc/passwd 条件: 哪一行,过滤什么内容 动作: print输出与显示 ,计算....

awk执行流程

awk命令取出某一行某一列(awk取第一行第一列)

awk取行

与sed类似

案例01 取出sed.txt的第2行

[root@oldboy81-golden-lnb /oldboy] awk 'NR==2' sed.txt 102,zhangya,CTO 39;行号 等于 2' sed.txt #NR awk内置变量 Number of Record 记录号(行号)

案例02 取出sed.txt中包含oldboy或lidao的行

[root@oldboy81-golden-lnb /oldboy]39;/oldboy|lidao/p' sed.txt 103,lidao007,COO 110,lidao,COCO [root@oldboy81-golden-lnb /oldboy]39;/oldboy|lidao/' sed.txt 103,lidao007,COO 110,lidao,COCO

案例03 取出文件第2行到第5行内容

39;行号大于等于2 并且 行号小于等于5' sed.txt 39;NR>=2 && NR<=5' sed.txt 方法02 sed -n '2,5p' sed.txt 39;NR==2,NR==5' sed.txt #从行号是2的行开始 到 行号是5的行结束( 了解)

案例04 取出文件第3行到最后一行内容

[root@oldboy81-golden-lnb /oldboy]39;NR >= 3' sed.txt 103,lidao007,COO 104,yy,CFO 105,feixue,CIO 110,lidao,COCO [root@oldboy81-golden-lnb /oldboy]39;3,$p' sed.txt 103,lidao007,COO 104,yy,CFO 105,feixue,CIO 110,lidao,COCO

案例05 取出从包含oldboy的行到lidao的行

[root@oldboy81-golden-lnb /oldboy] sed -n '/old/,/lidao/p' sed.txt 101,oldgirl,CEO 102,zhangya,CTO 103,lidao007,COO [root@oldboy81-golden-lnb /oldboy]39;/old/ , /lidao/' sed.txt 101,oldgirl,CEO 102,zhangya,CTO 103,lidao007,COO

awk取行小结

awk如何找出想要行?条件:

  • 指定行号 NR==1
  • 指定行号范围 NR>=3 或 NR>=3 && NR<=5
  • 过滤: /oldby|lidao/
  • 范围过滤: /oldboy/,/lidao/

[root@oldboy81-golden-lnb /oldboy]39;/11:02:00/,/11:02:30/' access.log |wc -l 1415 [root@oldboy81-golden-lnb /oldboy]39;/00/,/30/' access.log |wc -l 166945

awk取列

目标:熟练取出指定的内容或部分(取列)

39;{print $1,$3}' oldboy.txt

案例01 取出ls -lh命令中的第1列和第3列

ll -h | awk '{print $1,$3}'

注意:awk 中 $数字只有一个意思,取列

案例02 取出/etc/passwd每一行内容,加上行号

方法02 awk '{print NR,$0}' /etc/passwd NR 表示行号. $0 表示一整行内容.

案例03 取出/etc/passwd第1列和第3列

awk取列的,默认以空格,连续空格或tab键空格分割. 只需要使用3,$6….即可取出

如果想更改或指定新的,分隔符,需要使用 -F选项

-F指定分隔符,-F指定正则

[root@oldboy81-golden-lnb /oldboy]39;:' '{print $1,$3}' /etc/passwd awk -F':' '{print $1,$3}' /etc/passwd |column -t

案例04 取出ip.txt文件中ip(10.0.0.200)地址

awk中指定多个分隔符,需要使用正则匹配这多个分隔符即可

echo ' inet 10.0.0.200/24 brd 10.0.0.255 scope global ens33' >/oldboy/ip.txt

cat ip.txt inet 10.0.0.200/24 brd 10.0.0.255 scope global ens33 [root@oldboy81-golden-lnb /oldboy]39;{print $2}' ip.txt 10.0.0.200/24 [root@oldboy81-golden-lnb /oldboy]39;{print $2}' ip.txt |awk -F'/' '{print $1}' 10.0.0.200 01) [root@oldboy81-golden-lnb /oldboy]39;inet |/24' '{print $2}' ip.txt 10.0.0.200 cat ip.txt inet 10.0.0.200/24 brd 10.0.0.255 scope global ens33 [root@oldboy81-golden-lnb /oldboy]39;[ /]+' '{print $3}' ip.txt 10.0.0.200 39;[ /]+' 先用正则匹配出连续出现的空格或/. 然后交给awk -F作为分隔符. #方法03 awk+sed .....略 自己书写

案例05 取出/etc/passwd第1列,第3列和最后一列

  • $NF 最后一列
  • NF Number of Field 每行有多少个字段(域,列) 每行有多少列

39;:' '{print $1,$3,$NF}' /etc/passwd awk -F':' '{print $1,$3,$NF}' /etc/passwd

awk行列综合(awk过滤进阶)

精确过滤必备

  • awk可以完成,某一列中包含/不包含内容..
  • $3 ~ // 匹配或包含
  • $3 !~ // 不匹配或不包含

格式: awk -F: '第3列 包含 以1或2开头的内容' passwd 39;$3 ~ /^/' passwd

案例01 过滤出passwd中第3列以0到3结尾的,显示第1列和第3列内容

条件: 第3列以0到3结尾 (取行) 动作: 显示第1列和第3列 (取列) 39;$3~/[0-3]$/' passwd awk -F: '$3~/[0-3]$/' passwd |awk -F: '{print $1,$3}' 39;NR==1{print $1,$3}' /etc/passwd awk 选项 '条件{动作}' /etc/passwd awk -F: '$3~/[0-3]$/ {print $1,$3} ' passwd 条件 {动作}

案例02 过滤passwd中第3列大于0小于1000内容,显示第1列和第3列

动作(取列): 显示第1列和第3列 39;$3>0 && $3<1000' passwd 39;$3>0 && $3<1000{print $1,$3}' passwd awk -F: '$3>0 && $3<1000{print $1,$3}' passwd |column -t

案例03 过滤出网卡配置文件中的ip地址

/etc/sysconfig/network-scripts/ifcfg-ens33 (eth0) cat -n /etc/sysconfig/network-scripts/ifcfg-ens33 1 TYPE=Ethernet 2 PROXY_METHOD=none 3 BROWSER_ONLY=no 4 BOOTPROTO=none 5 DEFROUTE=yes 6 IPV4_FAILURE_FATAL=no 7 IPV6INIT=yes 8 IPV6_AUTOCONF=yes 9 IPV6_DEFROUTE=yes 10 IPV6_FAILURE_FATAL=no 11 IPV6_ADDR_GEN_MODE=stable-privacy 12 NAME=ens33 13 UUID=8e987179-762e-466e-aa40-fe38ebb012d0 14 DEVICE=ens33 15 ONBOOT=yes 16 IPADDR=10.0.0.200 17 PREFIX=24 18 GATEWAY=10.0.0.2 19 DNS1=223.5.5.5 20 IPV6_PRIVACY=no 动作: 显示第2列(以=分割) awk awk -F= 'NR==16' /etc/sysconfig/network-scripts/ifcfg-ens33 IPADDR=10.0.0.200 [root@oldboy81-golden-lnb /oldboy]39;NR==16 {print $2}' /etc/sysconfig/network-scripts/ifcfg-ens33 10.0.0.200 39;/IPADDR/ {print $2}' /etc/sysconfig/network-scripts/ifcfg-ens33 sed sed -n '16p' /etc/sysconfig/network-scripts/ifcfg-ens33 IPADDR=10.0.0.200 [root@oldboy81-golden-lnb /oldboy]39;16p' /etc/sysconfig/network-scripts/ifcfg-ens33|sed 's39; 10.0.0.200 [root@oldboy81-golden-lnb /oldboy]39;16 s39; /etc/sysconfig/network-scripts/ifcfg-ens33 10.0.0.200 [root@oldboy81-golden-lnb /oldboy] ip a s ens33 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:e8:3a:6f brd ff:ff:ff:ff:ff:ff inet 10.0.0.200/24 brd 10.0.0.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fee8:3a6f/64 scope link valid_lft forever preferred_lft forever [root@oldboy81-golden-lnb /oldboy]39;3p' inet 10.0.0.200/24 brd 10.0.0.255 scope global ens33 [root@oldboy81-golden-lnb /oldboy]39;3p' |sed -r 's\139; 10.0.0.200 [root@oldboy81-golden-lnb /oldboy] ip a s ens33 |sed -nr '3 s\139; 10.0.0.200 39;/IPADDR/ s39; /etc/sysconfig/network-scripts/ifcfg-ens33

awk统计计算功能

BEGIN{}和END{}

  • awk中的特殊的条件(模式),pattern
  • 这两个特殊的条件,都与计算相关,最常用的是END{}

特殊条件(模式)

含义

应用场景

BEGIN{}

BEGIN{}内容会在awk读取文件之前执行

1. 里面进行实验;2.进行计算,不需要读取文件内容;3. 创建或修改awk变量

END{}

END{}内容会在awk读取文件之后执行

1. awk在读取文件的时候进行统计与计算. 最后统计完成在END{}输出最终结果

BEGIN{}

awk 'BEGIN{ print 1/3}' 0.333333 [root@oldboy81-golden-lnb /oldboy]39;BEGIN{ print 1/3,1-3,1+3,3*3}' 0.333333 -2 4 9 [root@oldboy81-golden-lnb /oldboy]39;BEGIN{ print 1/3,1-3,1+3,3*3,2^10}' 0.333333 -2 4 9 1024 39;NR==1{print $1}' passwd awk 'BEGIN{FS=":"} NR==1{print $1}' passwd

END{}

案例01 统计/etc/passwd的行数

wc -l /etc/passwd 动作: i++ 39;{i++}' /etc/passwd 39;{i++} END{print i}' /etc/passwd 详解 i++ i=i+1 === i++ 39;{i++} END{print i}' num.txt 之前的i内容 i=i+1 之后i的内容 读1行 空/0 i=0+1 1 第2行 1 i=1+1 2 第3行 2 i=2+1 3 第4列 3 i=3+1 4 .......

案例02 统计/etc/passwd中可登录用户数量

可登录的用户: 命令解释器是/bin/bash 动作: c++ 输出最后次数/数量. END{print c} 39; {i++} END{print i}' /etc/passwd awk '/bash$/ {c++} END{print c}' /etc/passwd 39;/bash$/ {c++;print c} ' passwd

案例03 统计/etc/services文件中空行的数量

动作: j++ 输出最后次数/数量. [root@oldboy81-golden-lnb /oldboy]awk '/^$/' /etc/services [root@oldboy81-golden-lnb /oldboy] awk '/^$/{j++} ' /etc/services [root@oldboy81-golden-lnb /oldboy] awk '/^$/{j++} END{print j}' /etc/services 17

案例04 生产工作案例 统计access.log中一共用了多少流量

文件中记录着用户每天流量.求和,累加. cat > liu.log<<EOF 1 5 0.5 10 100 200 300 EOF i=i+1 == i++ sum=sum+$1或$0 之前的sum内容 sum=sum+$1 之后sum的内容 第1行 0 sum=0+1 1 第2行 1 sum=1+5 6 第3行 6 sum=6+0.5 6.5 第4行 6.5 sum=6.5 + 10 16.5 sum=sum+$xxx cat liu.log 1 5 0.5 10 100 200 300 [root@oldboy81-golden-lnb /oldboy]39;{sum=sum+$1} END{print sum}' liu.log 616.5

条件: 无 最后输出: END{print sum} [root@oldboy81-golden-lnb /oldboy]39;{sum=sum+$10} END{print sum}' access.log 2478496663 [root@oldboy81-golden-lnb /oldboy] awk '{sum=sum+$10} END{print sum/1024}' access.log 2.42041e+06 [root@oldboy81-golden-lnb /oldboy]39;{sum=sum+$10} END{print sum/1024/1024}' access.log 2363.68 [root@oldboy81-golden-lnb /oldboy]39;{sum=sum+$10} END{print sum/1024/1024/1024}' access.log 2.30828 [root@oldboy81-golden-lnb /oldboy]39;{sum=sum+$10} END{print sum/1024^3}' access.log 2.30828 [root@oldboy81-golden-lnb /oldboy]39;{sum=sum+$10} END{print sum/1024^3"GB"}' access.log 2.30828GB

awk常见环境变量

环境变量

含义

NR

行号

NF

每行有多少列

$NF

表示最后一列

$数字

2 取出某一列或某几列. 一般配合-F一起使用

$0

每行的所有列(一整行内容)

FS

field separator字段(列)分隔符,分隔符.-F背后修改的内容

本文【awk命令取出某一行某一列(awk取第一行第一列)】由作者: B/S结构 提供,本站不拥有所有权,只提供储存服务,如有侵权,联系删除!
本文链接:https://www.cuoshuo.com/blog/4507.html

(0)
上一篇 2023-03-14 08:57:02
下一篇 2023-03-14 08:59:42

相关推荐

  • c语言软件用什么比较好 c语言一般用什么软件

    对于大部分工科类专业的学生来说,如果说是需要学习c语言的话,那选择编译器就是我们第一个遇到的问题了,这一类软件有很多,每一个软件都有他各自的优点,当然了也有他各自的缺点,这里简单推荐以下两个c语言编译器: 一、Dev-C++ 这款软件对于初学者来说可以减少很多的配置,只需要简单配置一下就能够在上面进行编写程序。让我们有更多的时间去学习逻辑层面的东西,而不是说…

    2023-03-22
    000
  • excel表格字母大小写转换_excel数字大小写字母转换

    在实际的工作中,经常会遇到字母和数字的大小写转换问题,各位亲是怎么实现的呢? 一、字母转换。 1、全部大写——Upper。 方法: 在目标单元格中输入公式:=UPPER(B3)。 2、全部小写——Lower。 方法: 在目标单元格中输入公式:=LOWER(C3)。 3、首字母大写——Proper。 方法: 在目标单元格中输入公式:=PROPER(B3)。 二…

    2023-03-11
    600
  • 最新主流国外搜索引擎

    我们大家一般知道的搜索引擎应该是,百度,谷歌,bing,360,搜狗,可能对于其他的搜索引擎了解的不多,其实百度在国内是霸主地位,但是它在世界搜索引擎占据的份额怎么样呢?这篇文章我们一起来了解下世界上其他的搜索引擎。 1,google.com 谷歌的地位就不用多说了,世界上除了特殊的几个国家,基本上谷歌都占据了垄断地位的,目前谷歌在全世界的搜索引擎份额达到了…

    2023-03-15
    300
  • linux系统安装java环境

    手动安装可以让用户更好的控制 Java 运行时环境。 使用 Linux 发行版的软件包管理工具来安装 Java 软件包是很容易的。然而,有时你需要手动安装 Java。这对基于 Java 的应用服务器(如 Tomcat 或 JBoss)的管理员特别重要。许多开源和专有软件产品都依赖于这些服务。 开发者或运行时套件? Java 虚拟机Java Virtual M…

    2023-03-20
    000
  • 王者的空格符号怎么打,王者空格如何打出空格

    王者改名专用空格怎么打出来的?王者荣耀改名专用空格怎么弄?在王者荣耀中,改名字是不允许输入空格的,但是不少玩家发现还是有人的昵称带了空格,这是怎么做到的呢?想要知道原因或者也想要空格昵称的玩家快跟着小编往下看,下面介绍了王者荣耀改名专用空格的输入方式,你可以直接复制使用! 王者荣耀改名专用空格怎么弄: 进入游戏后提示起游戏名,这里需要复制→【   】这个(只…

    2023-03-12
    300
  • windows正在启动后无信号 win7正在启动然后黑屏

    我们在使用电脑的过程中,难免会出现硬件或者系统、软件的故障,而近期有一个网友称自己的电脑出现了一个故障,那就是开机之后显示器黑屏无信号输入,但电脑主机一直在运行,其实出现了这个故障,原因众多,我们需要一一排查还可以解决问题,下面装机之家分享一下开机之后显示器黑屏无信号输入,但电脑主机一直在运行的解决方法。 据了解,该网友的显示器黑屏,并提示了无信号输入,显示…

    2023-03-20
    000
  • vc60安装教程win10无法正常使用(win10点关机没反应)

    许多大学都有学习c语言的课程,一般这些学校上机用的是vc.60,但是自己在win10的系统上,vc6.0会显示无法正常启动 接下来给大家带来一个解决方法!这个方法是网上的答案,后面会给大家说一下小编自己电脑上的解决方法 下面是具体的操作步骤。 在 VC6.0 的快捷方式或开始菜单上单击鼠标右键,选择“属性”: 在弹出的对话框中,将兼容模式修改为Windows…

    2023-03-15
    100
  • 如何用随机数表产生随机数_生成随机数的方法

    今天跟大家分享一下如何利用Excel生成和为指定数的随机数 1.如下图我们想要生成和为100的12个随机数。 2.选中D2:F5单元格区域 3.点击下图选项(Excel工具箱,百度即可了解详细的下载安装信息,本文这里就不做具体解说) 4.依次点击【随机重复】、【随机分摊】 5.点击【按总和分摊】,然后在【目标总和】中录入100. 6.调节离散程度选项,设置随…

    2023-03-09
    600
  • python简单的多线程编程_python多线程爬虫

    图/文:迷神 我们在Python爬虫中,重要的是讲究速度,如果有10万或者100万Url地址,写过爬虫的都会知道,那估计是非常慢的。我们的Python爬虫一般IO密集型业务,Python爬虫程序需要发起网络请求,必然就有网络IO阻塞,通常请求一个URL耗时要几百毫秒到几秒,逐步执行,和我们CPU那么高性能比起来,那真是天壤之别。 比如,我们Python爬虫在…

    2023-03-09
    500
  • java数组添加元素的方法_java对象数组添加新数据

    我们知道,在C语言和java当中都是一种十分重要的数据结构,但是熟悉数组的朋友都知道,数组一旦被赋值就很难被轻易改动,相比之下人们往往更偏向另一种类似于数组当中但比数组更灵活的集合类型。但是,爱挑战的我。纵使数组在复制之后很难被改动,但是不意味着不能被改动,今天我就教大家如何对数组进行添加元素和删除元素操作以及插入元素操作。 打开eclipse我们新建一个类…

    2023-03-09
    600

发表回复

登录后才能评论
返回顶部
错说博客上线啦!