日常积累------awk脚本

原创 2015年07月06日 23:16:49

有必要将最近的一些技术整理整理,今天的主要整理目标:awk脚本

awk 命令的名称来源于三位作者的首字母,awk命令主要用逐行扫描处理文本文件,并且能够一次读取多个文件。

1.举一个简单的例子:

awk -F '\t' '{print $1,$2,$NF}' a.txt

awk 脚本每次读取a.txt文件中的一行,每一行按照回车符'\t'分割,$1对应分割后字符串数组的第一个字段,$2对应第二个,$NF对应当前行的最后一个字段。

print 表示将这三个字段打印出来(默认间隔为空格,可以设置)。

2.设置输出字段间隔符号:

awk -F '\t' 'BEGIN{OFS="\t"}{print $1,$2}' a.txt
awk 脚本内部有一些常用变量,OFS变量存储输出字段的间隔符号,$0表示当前整行。

3.两个文件取交集

awk -F '\t' 'NR==FNR{a[$1]=$0}NR>FNR{if($1 in a){print}}' a.txt b.txt > c.txt

上面的命令实现了两个文件按照第一列取交集,NR变量存储截止到目前awk脚本读取的行数,FNR对应当前文件的行数,第一个判断式处理第一个文件,并且以第一个文件的首列作为键存储进入数组a,第二个表达式处理第二个文件,大括号里面判断第二个文件的第一列字段是否在数组a当中,如果在则输出。

文件a.txt,b.txt取差集(b-a)

awk -F '\t' 'NR==FNR{a[$1]=$0}NR>FNR{if(!($1 in a)){print}}' a.txt b.txt > c.txt
文件a.txt,b.txt取并集

awk -F '\t' 'NR==FNR{a[$1]=$0;print}NR>FNR{if(!($1 in a)){print }}' a.txt b.txt > c.txt

4.使用shell变量

awk -F '\t' 'print "'$x'"' a.txt
采用双引号套单引号+$符号

5.调用系统命令

awk -F '\t' '{cmd = "./a.exe" $2}; cmd | getline x;print x} a.txt
a.exe是一个工具需要传递参数,awk脚本中将第二个字段的变量传给a, cmd保存命令字符串。cmd | getline x 运行命令并将结果保存在x当中。

6.正则表达式使用内部变量

awk -F '\t' 'NR==FNR{a[$1] = $0} NR>FNR{flag = 1; for(x in a){if($1 ~ x){flag = 0; break}}if(flag == 1){print }}' dict.txt a.txt > c.txt

x 为内部变量如果使用其作为正则匹配项,直接调用即可。该命令实现了在a.txt中的第一列字段中过滤字典中的关键字。

7.内部命令

awk -F '\t' '{lens = split($1,a,"\\$")}{for (i in a){print i}}' a.txt

将每一行的第一个字段再按照$符号切分,并且打印所有符号。








Java知识点积累

1.Java中对象与引用的区别 http://zwmf.iteye.com/blog/1738574 2.String创建后是不可以改变的 http://blog.csdn.net/zhangjg_...
  • wenwensuper
  • wenwensuper
  • 2017年10月24日 13:49
  • 44

java日常基础知识

1、面向对象的特征有哪些方面?  答:面向对象的特征主要有以下几个方面:  - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不...
  • yys3155
  • yys3155
  • 2017年02月16日 17:06
  • 776

leeboy的linux学习八awk脚本

一、awk脚本小程序,计算某一文件夹中文件的大小和。 #!/bin/awk -f #命名:file_tot.awk #功能:计算当前文件夹中文件大小和 #使用方法:ls -l|./file_t...
  • Leeboy_Wang
  • Leeboy_Wang
  • 2012年09月04日 11:11
  • 4770

Shell脚本之awk篇

一、概述 1. 产品概述:     awk是一种编程语言,用于在linux/unix下对文本和数据进行扫描与处理。数据可以来自标准输入、文件、管道。     awk分别代表其作者姓氏的第一个字母。因为...
  • yakoo5
  • yakoo5
  • 2015年02月26日 14:18
  • 3407

用awk编写Shell脚本

一、概述 1. 产品概述: awk是一种编程语言,用于在linux/unix下对文本和数据进行扫描与处理。数据可以来自标准输入、文件、管道。 awk分别代表其作者姓氏的第一个字母。因...
  • imxiangzi
  • imxiangzi
  • 2015年11月10日 16:58
  • 472

awk向脚本传递参数(一)

在awk中,一个容易引起混乱的地方就是向脚本传递参数。参数将值赋给一个变量,这个变量可以在awk脚本中访问。这个变量可以在命令行上设置,放在脚本的后面,文件名前面。 awk 'script'...
  • xiyangyang052
  • xiyangyang052
  • 2015年06月30日 21:19
  • 476

shell中以-f的方式调用awk脚本

#对文件中的数字进行格式化,保留小数点两位,整数部分每三位一分割#用法:awk -f frm_num.awk 列号列表 目标文件#最后一个参数为目标文件,其他为列号;没有列号则对所有数据格式化#如:a...
  • ayw215
  • ayw215
  • 2011年07月16日 22:02
  • 1851

shell脚本系列-awk用法总结

awk的用法a w k语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息 调用awk有三种方式调用a w k,第一种是命令行方式,如:     awk –F : ‘commands’ inp...
  • lile269
  • lile269
  • 2011年05月03日 14:41
  • 16417

执行awk程序的3种方式

awk是Linux系统中一种强大的数据处理工具,执行awk程序有3种方式。介绍如下: 1. 命令行方式     语法形式:awk ' awk程序语句' 被处理文件名 ...
  • puqutogether
  • puqutogether
  • 2015年05月19日 21:28
  • 2318

sed && awk工具 及一些常用的shell脚本

(一)sed sed是一个精简的、非交互式的流式编辑器,它在命令行中输入编辑命令和指定文件名,然后在屏幕上查看输出。 逐行读取文件内容存储在临时缓冲区中,称为“模式空间”(pattern spac...
  • NK_test
  • NK_test
  • 2016年03月21日 23:16
  • 3441
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:日常积累------awk脚本
举报原因:
原因补充:

(最多只允许输入30个字)