1 min read

AWK使用笔记

在Ubuntu下,默认安装mawk。建议使用gawk。如果没有安装,可以通过

apt-get install gawk

进行安装。

安装后,可以通过以下命令,选择默认使用的awk。

sudo update-alternatives --config awk

awk学习,建议参考The AWK Programming Language这本书,中译本见这里

1. 查看行列数的方法

假设example.csv是由英文逗号,分割的csv文件。

1.1 查看文件的行数

第一种方法,利用wc命令,该命令可以统计文件中单词、字符、行数等信息。

wc -l example.csv

第二种方法,通过awk命令。实际上awk是一门编程语言,查看行数的语句为:

awk 'END { print NR }' example.csv

END表示处理完文件后,打印出行数。这里并未对文件做任何处理。NR为awk的内置变量,是Number of Records的缩写,意为记录的计数。一条记录为一行。遍历完文件最后一条记录之后,NR指向最后一条记录的计数,也就是文件的行数。

1.2 查看文件的列数:

假定所有记录的列数相等,查看文件列数的最快方法为:

awk -F "," '{ print NF; exit}' example.csv

读取第一行,计算列数,awk程序退出。-F表示每一行通过英文逗号切割为多列。NF是awk的内置变量,是Number of Field的缩写,意为字段的数量。一个字段为一列。

2. 查看指定范围行和列的内容

2.1 查看指定范围的行内容

查看1-10行的数据

awk 'NR <=10 { print $0 }' example.csv

2.2 查看指定范围的行和列内容

查看前10行,第1-10列的数据,稍微复杂一些,需要用到循环:

awk -F "," ' NR<= 10 {for (i=1; i<11;i=i+1) {printf($i" ")}; printf("\n") }' example.csv

基本的逻辑:

  • NR<=10 判断每行行号是否小于10,如果是,则输出;
  • for循环部分针对每一行,通过**-F指定的英文逗号",“对行**进行切割,通过for循环输出指定的列;
  • 每一行列输出完毕后,再输出一个换行符号。

上述代码适合查看非常大的文件。