1、cat exe1 | awk '{a[$1]+=$2}END{for(i in a) print i,a[i]}'
aaa 6
bbb 2
ccc 4
2、awk '{a[$0]++}END{l=asorti(a);for(i=1;i<l;i++)print a[i]}' exe2
a
aa
bb
cc
d
dd
e
f
ff
k
mm
nn
3、[@83_20 exercise]$ awk '{a[$1]++}END{l=asorti(a,b);for(i=1;i<l;i++)print b[i],a[b[i]]}' exe3
aa 2
bb 2
cc 3
dd 4
mm 2
nn 1
4、什么是NR和FNR
比如现在AWK处理到第五行。第一行没有进行操作,2,3,4,5行进行了操作,那么NR=5,FNR=4
NR==FNR 表示从起始行到当前行,awk都进行了操作,比如修改,添加等等
简单来说,NR就是当前读取多少行,FNR就是当前修改了多少行,FNR<=NR
NR: 当前所有文件的当前记录数。
FNR:当前文件的当前记录数.
NR - Number of Record - 当前处理的行是第几行(因为awk是流处理工具,一行一行处理的,所以NR在不停的自增1)
FNR - File Number of Record - 当前处理的行是当前处理文件的第几行
NF - Number of Fileds - 当前行有多少列数据(这个在每行都会根据设定的分割符重新计算,默认分割符是任务长个空白符)
(NR==FNR) 大致等效于 (ARGIND==1) , 前者就是说当然处理的总行数跟文件内行数相等,而这种情况一般来说都是在第一个文件上,而ARGIND==1是参数位置第1的文件时生效。
<也有可能前面的文件是空的,那么NR==FNR就生效于第一个非空文件,这就是跟ARGIND==1的明显区别>
5、[@83_20 exercise]$ awk '{a[$NF]=$0}END{l=asorti(a,b);for(i=1;i<=l;i++)print i"\t"b[i]"\t"a[b[i]]}' exe4
1 12 78 90 12
2 56 12 34 56
3 89 23 45 89
[解析]
首先明白按最后一个域排序,即把最后一个域做为下标,把该行的值存入数组a,本案文本是3行,执行完后得到如下内容:
a[56]=12 34 56
a[12]=78 90 12
a[89]=23 45 89
END,在最后执行命令,asorti对数组a的下标进行排序,并把排序后的下标存入新生成的数组b中,并把数组a的长度赋值给变量l。然后必须用for循环取出数组的下标,因为数组是无法直接print打印的,这时候打印输出变量i,排序后的数字b的下标的值,然后把该下标在数组a中的赋值打印出来。
内置函数asort只对值进行排序,会丢掉原来的数组值
6、aaa 1
aaa 3
ccc 12
aaa 8
bbb 89
ccc 16
eee 12
ccc 11
eee 13
fff 16
ddd 56
要求对以上文本按第一列的名称进行第2列的求和,并且按升序排列打印。
awk '{a[$1]+=$2}END{for(i in a){print i,a[i]}}' file
aaa 12
ccc 39
eee 25
bbb 89
ddd 56
fff 16
[解析]
把$1为下标,把$2的值累加到以$1为下标的数组a的值上,然后用for(i in a)这最普通的常用的方式取出数组中的下标和其对应的值,但是这种方式是随机取出的。怎么能达到升顺输出呢?我们看下面的例子。
awk '{a[$1]+=$2}END{l=asorti(a,b);for(i=1;i<=l;i++){print b[i],a[b[i]]}}' file
aaa 12
bbb 89
ccc 39
ddd 56
eee 25
fff 16
[解析]
第一部分操作和上句一样,只是后面增加了awk的内置排序的函数asorti,然后通过for循环顺序依次取出a数组的下标和对应的值。
7、awk 'BEGIN{info="it is a test";lens=split(info,tA," ");print length(tA),lens;}'
8、awk 'BEGIN{info="this is a test2012test!";gsub(/[0-9]+/,"!",info);print info}'
9、cat exe4 exe5 | sort -n -k1 | awk 'NR%2==1{fd1=$2"\t"$3;next}{print $0"\t"fd1}'
10、awk 'NR==FNR{a[$0]=1;print} NR>FNR{if(!(a[$0])){print}'} aa1 bb1 【两文件的交集】
分享到:
相关推荐
### Awk 使用手册详解 #### 一、Awk 简介 Awk 是一种功能强大的文本处理工具,广泛应用于 Unix 和类 Unix 系统中。它的名字来源于三位设计者的名字首字母:Aho (Peter)、Weinberger (Brian) 和 Kernighan (Doug)。...
在IT领域,`awk`是一种强大的文本分析工具,常用于处理结构化数据,如日志文件、...参考《AWK编程基础.pdf》和《awk使用手册.pdf》会有更深入的了解,同时,《sed使用手册.pdf》也是处理文本的强大工具,值得一同学习。
在提供的"Unix awk使用手册.htm"和"awk.pdf"文档中,应该包含了更详细的`awk`使用示例和高级技巧,包括模式匹配的复杂用法、自定义函数的编写、数组的使用以及文件操作等。通过深入学习这些资料,你将能够熟练掌握这...
sed 和 awk 使用实例 Sed 和 Awk 是两种强大的命令行工具,在 Unix 和 Linux 系统中广泛应用于文本处理和数据处理。本文将通过一些实例来展示 Sed 和 Awk 的使用场景和方法。 一、sed 使用实例 1. 删除 login....
此外,由于`awk`通常作为Unix/Linux系统的一部分预装,用户无需额外安装即可直接使用,这使得它成为一个易于获取和使用的工具。 在处理文本数据时,`awk`的优势在于它可以方便地处理分隔符,如空格或制表符,使得...
### awk使用手册详解 #### 一、awk简介 在UNIX世界里,存在许多强大的文本处理工具,其中awk作为一款出色的模式扫描与处理语言,却往往被人们所忽视。它的名字来源于三位创造者的名字首字母——Aho、Weinberg以及...
### awk使用基本理论 #### 一、awk简介与版本 - **awk** 是 Linux Shell 三剑客之一,主要用于文本处理。它是一种强大的文本分析工具,可以在数据流中搜索匹配的模式并执行相应的操作。 - **awk** 有三个主要版本...
对于不同的Oracle版本或不同的性能问题,可能需要使用其他工具或定制化awk脚本来进行更深入的分析。同时,理解Oracle的内部工作原理和熟悉SQL优化技巧是有效利用此工具的关键。 在实际应用中,"ass109.awk" 只是...
### Awk命令使用详解 #### 一、Awk简介 Awk是一种强大的文本处理语言,专为高级文本处理和数据分析而设计。它被广泛应用于快速编写脚本来处理文本文件,如日志文件、配置文件等。Awk的核心功能在于能够方便地对文本...
**Unix AWK使用手册** 这个手册详细介绍了在Unix环境下使用AWK的各种方法,包括基本命令行选项、高级功能以及一些实用技巧。 通过学习这个AWK详细文档和实例,你可以更好地理解和掌握AWK的用法,从而更有效地处理...
默认情况下,`awk`使用空格或制表符作为字段分隔符(Field Separator, FS)。可以通过内置变量`FS`来改变这个行为,例如: ```bash awk -F ',' '{ print $1 }' file.csv ``` 这会将逗号作为字段分隔符,打印CSV文件...
gawk不仅完全兼容标准的awk,还提供了许多增强功能,使其成为Linux系统上查找和使用的首选awk版本。 #### 二、awk命令格式与选项 ##### 2.1 awk命令格式 awk的使用可以通过两种基本方式: - awk [options]'...
手册分为四大部分:AWK语言介绍、使用AWK解决问题、使用gawk扩展AWK语言以及附录。其中AWK语言的介绍部分涵盖了AWK的基本概念和基本语法,以及如何运行awk和gawk程序、正则表达式、输入文件读取、输出打印、表达式、...