`
臻是二哥
  • 浏览: 188404 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
Group-logo
Java技术分享
浏览量:0
社区版块
存档分类
最新评论

awk简明用法

awk 
阅读更多
这几天在写数据库脚本,需要频繁的处理字符文件,笔者之前都是用java程序处理字符文件,结果看到同事用awk几秒钟就搞定了一个处理,觉得太牛逼了,于是花时间学习了下。

本文旨在帮助awk新手快速熟悉awk的常见用法,笔者会尽量把文章写得像清纯的女神一样撩起你的兴趣,不过最终还得你花力气自己撸

首先,我们使用netstat的输出作为源文件:
netstat -ano >> netstat.txt


我们发现netstat.txt中的信息太乱了,我们仅仅需要首列是tcp的行,当然第二行的标签也需要保留:
cat netstat.txt | awk '$1=="tcp" || NR==2 {print $0}' >> netstat1.txt


netstat1.txt文件还算干净,我们需要第六列匹配"LISTEN"的行,并格式化输出(awk的格式化输出和C语言相同):
cat netstat1.txt | awk '$6 ~ /LISTEN/ || NR==1 {print $0}' >> netstat2.txt


对于netstat2.txt文件,仅仅需要它的第1,4,6列,并格式化输出(awk的格式化输出和C语言相同):
cat netstat2.txt | awk '{printf "%5s %20s %10s\n",$1,$4,$6}' >> netstat3.txt


对于netstat3,.txt,不需要Local列的端口号:
cat netstat3.txt | awk '{print $1,$3,$2}' | awk -F ':' '{print $1}' >> netstat4.txt


把netstat4.txt按照第3列的内容拆分成多个文件:
cat netstat4.txt | awk '{print > $3}'


下面进行一些补充:
~表示匹配模式
!~表示不匹配模式
/***/中夹着的是模式内容
$0	整行内容
$1~$n	当前行的第n个字段,字段间由FS分隔
FS	输入字段分隔符 默认是空格或Tab
NF	当前记录中的列的数量
NR	行号,从1开始,如果有多个文件话,这个值也是不断累加中。
FNR	行号,从1开始,与NR不同的是,这个值会是各个文件自己的行号
RS	输入的记录分隔符, 默认为换行符
OFS	输出字段分隔符, 默认也是空格
ORS	输出的记录分隔符,默认为换行符
FILENAME	当前输入文件的名字


对于文件test.txt
Marry,2143,78,84,77
Jack,2321,66,78,45
Tom,2122,48,77,71
Mike,2537,87,97,95
Bob,2415,40,57,62


使用分隔符获取第一列,并指定输出分隔符
cat test.txt | awk -F ',' '{print $1,$2}' OFS='----' >> test1.txt


对于test.txt,写一个awk脚本来处理它:
$ cat cal.awk
#!/bin/awk -f
#运行前
BEGIN {
    math = 0
    english = 0
    computer = 0
 
    printf "NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL\n"
    printf "---------------------------------------------\n"
}
#运行中
{
    math+=$3
    english+=$4
    computer+=$5
    printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5
}
#运行后
END {
    printf "---------------------------------------------\n"
    printf "  TOTAL:%10d %8d %8d \n", math, english, computer
    printf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR
}


结果如下:
$ awk -f cal.awk score.txt
NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL
---------------------------------------------
Marry  2143     78       84       77      239
Jack   2321     66       78       45      189
Tom    2122     48       77       71      196
Mike   2537     87       97       95      279
Bob    2415     40       57       62      159
---------------------------------------------
  TOTAL:       319      393      350
AVERAGE:     63.80    78.60    70.00


怎么样,爽了吗!






0
0
分享到:
评论

相关推荐

    Awk简明教程

    ### Awk简明教程 #### 一、Awk简介与背景 Awk 是一款功能强大的文本处理工具,最初由 Alfred Aho、Peter Weinberger 和 Brian Kernighan 在 1977 年开发,用于 Unix 系统。名字来源于这三位创始人的姓氏首字母。...

    sed和awk简明手册

    ### sed和awk简明手册知识点总结 #### 一、sed简介 - **基本概念**: - sed(stream editor)是一种非交互式的面向字符流的编辑器,它主要用于文本文件的处理,尤其适用于批量替换、删除、添加等操作。 - sed的...

    awk sed 简明教程

    本简明教程将深入探讨这两个工具,帮助你更好地理解和掌握它们的用法。 awk,全称“AWK Pattern扫描和处理语言”,是一种编程语言,常用于在文本文件中进行模式匹配和数据提取。它的工作方式是读取一行文本,然后对...

    perl学习简明教程

    在面向对象编程方面,Perl支持类和对象的创建,可以通过`package`定义一个类,使用`new`关键字实例化对象,通过`sub`定义方法。Perl5.6以后的版本还引入了角色(roles),提供了一种组合类行为的方式,增强了代码的...

    Linux命令手册简明版

    3. **文本处理**:`grep`用于在文件中搜索特定字符串,`sed`进行流编辑,`awk`则是一个强大的文本分析工具。`tr`用于字符转换,`cut`用于截取字段。 4. **流程控制**:`if`、`else`、`for`、`while`等用于编写shell...

    简明perl教程(第四版)

    它融合了C、sed、awk等语言的特点,允许开发者用多种风格编写代码。Perl的弱类型系统使得变量声明简洁,但这也要求程序员更加注意类型转换。此外,Perl支持模式匹配,这是它在文本处理领域中的强大工具,可以高效地...

    UBUNTU linux命令行简明教程

    - **文件压缩与解压**:讲解了常用的文件压缩与解压命令,如gzip、bzip2、tar等的使用方法。 - **文件比较**:介绍了如何使用命令行工具来比较两个文件的内容差异。 - **文本处理工具**:介绍了用于文本处理的命令,...

    Red Flag Linux Desktop 6.0简明用户手册

    《Red Flag Linux Desktop 6.0简明用户手册》是一本专为Linux初学者准备的指导书籍,旨在帮助读者快速掌握Red Flag Linux Desktop 6.0操作系统的基本使用方法。Red Flag Linux是由中国红旗软件有限公司开发的一款...

    简明Linux词汇表

    根据给定的文件信息,我们将深入探讨Linux领域中的一些关键概念和术语,这些知识点对于初次接触Linux系统的Windows...通过理解这些术语的意义和用法,用户可以更顺利地在Linux环境中导航,充分利用其丰富的功能和资源。

    2023年Python正则表达式re模块简明笔记.docx

    需要注意的是,正则表达式并不是一个程序,而是一种用于解决字符串的一种模式,假如你想用它来解决字符串,就必须使用支持正则表达式的工具,比如Linux中的awk、sed、grep,或者编程语言Perl、Python、Java等等。...

    PHP简明教程

    它以C语言为基础,结合了Perl、awk和SQL等语言的特性,使得Web开发者能够更方便地创建动态交互式网页。 一、PHP的基础概念 1. **语法结构**:PHP的语法与C语言类似,使用尖括号包围代码块,如 `<?php ... ?>`。它...

    perl简明教程

    你可以创建类(class),定义方法(method),并使用继承、封装和多态等概念。使用关键字package定义类,use关键字导入模块,提供代码重用。 Perl的模块系统是其强大功能的一个体现。Perl模块可以从CPAN...

    简明Perl教程 perl primer

    Perl的设计理念是融合了多种编程语言的优点,特别是汲取了C语言的强大功能、sed和awk的文本处理能力,以及shell脚本的易用性,形成了一个高效且灵活的脚本语言。 Perl的主要特点包括: 1. **文本处理**:Perl在...

    Linux指令速查手册

    使用手册的用户可以通过参考这份文档,快速地找到他们需要执行操作的命令及其使用方法,从而提高工作效率。 Linux指令的使用是通过命令行界面(CLI)来完成的,与图形用户界面(GUI)不同,它依赖于用户对命令的...

    TheLinuxCommandLine中文版

    尽管Linux的学习曲线可能比较陡峭,但本书通过逐步引导,让读者能够更容易地掌握命令行的使用方法。 书中还强调了Linux的“自由”哲学。自由在这里不仅仅是指成本上的免费,更重要的是在软件使用上的自由。Linux...

    cheatsheets

    "cheat sheets" 在这里是指用于快速查询Linux命令、配置和管理技巧的简明指南。 从压缩包子文件的文件名称列表 "cheatsheets-master" 来看,这可能是一个项目的主目录或者源代码库。"master" 通常是Git仓库的默认...

    人事管理系统程序设计语言

     1、ActionScript APL、 A+ J语言 Ada 汇编语言 AWK Basic Fortran VBScript Brainfuck C语言 C++ C# Clipper COBOL dBase PASCAL Delphi Forth FoxPro F# Fava IDL Java JavaScript J# LISP Lua LOGO Modula Nuva ...

    提取oralce当天的alert log的shell脚本代码

    该标题简明扼要地说明了本文档的主要内容:一个用于提取Oracle数据库当天Alert Log的Shell脚本。 #### 描述解析 **提取oralce当天的alert log的shell脚本代码,需要的朋友可以参考下** 此描述进一步强调了脚本的...

Global site tag (gtag.js) - Google Analytics