awk数组

时间:2024-10-31 15:25:14编辑:阿奇

linux shell中awk的用法

所有的编程书籍都是通过一个“Hello world!”简单程序入门,作为借鉴,本文也采用此方法带大家入门。现在,在当前目录下建立一个文本文件hello.txt,内容如下:
Hello world!
在命令行中输入以下命令:
$ awk '{ print }' hello.txt
执行后hello.txt文件的内容显示在屏幕上。编写并且执行awk程序的方法很简单,如上所示,花括号内的是程序代码,后面的hello.txt为指定的输入文件。awk是一种行处理程序,执行awk时,它依次对输入文件中的每一行执行花括号中的代码,如上面的例子,就是对hello.txt中的每一行执行print命令。所有输出都发送到stdout,最后在屏幕上显示的结果为“Hello world!”。
上面的例子是将脚本作为命令行自变量传递给awk,我们也可以把脚本写入一个外部文件,然后通过-f选项向awk传递这个脚本文件。例如编写脚本文件hello.ask如下:
{ print }
然后通过如下方式执行:
$ awk -f hello.awk hello.txt
这种编写独立脚本文件的方式应用在多行、比较复杂的程序上,非常合适,而且,在后面你还将看到,这种方式还可以让你非常方便地使用附加awk功能。


awk语句#awk '{for(i=1;i<=NF;i++)a[$i]++;for(i in a)print i" = "a[i]}' tongji.txt

{for(i=1;i<=NF;i++)a[$i]++;
NF表示单行(记录 )中字段 数,$i表示对应字段 ,假设 文本是 "a b c d a b a" ,a出现3次所以a[a]++执行了3次,a[a]的值增加了3,这个循环完成 后a数组 中为已经读取的行相同内容字段出现次数

for (i in a) 表示 依次迭代a数组 的下标 ,赋值给变量 i,如上例a数组的下标 会是a,b,c,d(顺序是随机的),这四个下标会被按随机顺序赋值给变量 i。
print i"="a[i],打印字段 i和其出现次数a[i]
这样写每读取一行都 会打印 一次已经 重复出现过的字段 统计,为什不只打印 最终 统计呢,像下面这样

awk '{for(i=1;i<=NF;i++)a[$i]++;} END {for(i in a)print i" = "a[i]}' tongji.txt


上一篇:小型振动压路机

下一篇:没有了