本以为只是个命令,学起来这就是语言么,参看man
手册多试吧
格式
awk 'pattern{action}' <file>
A pattern can be:
BEGIN
END
expression
示例:
awk '{print $0}' awk.txt
print
是打印命令,awk.txt
是我们为测试建的文件,内容如下:
aa:sss ddd fff|ff
qwe:d44 88 kkk|099
sdd:6 ff ff ff
ddd|lll:fff
-
$
变量awk
会根据空格或制表符,将每一行分成若干字段$0
:当前行整行;$1
:第一个字段;$2
:第二个字段;$3
:第三个字段;…
指定分隔符
awk
默认是以空格或制表符分割,也可使用-F
指定分隔符
awk -F ':' '{ print $1 }' filepath
输入输出
-
输入
getline
getline < file
command | getline
command | getline var
-
输出
print
:参数可以是变量、数值或字符串
printf
:格式化输出
内置变量
除了$
变量以外,awk
还定义了其他一些变量
ARGC 命令行参数个数
ARGV 命令行参数(awk/filepath)
CONVFMT 数据转换为字符串的格式"%.6g".
ENVIRON 环境变量集合.
FILENAME 当前输入的文件名.
FS 输入的数据域之间的分隔符,默认空格.
NR 当前输入行数
NF 当前行被分割的列数,$NF代表最后一个字段,$(NF-1)代表倒数第二个字段...
OFS 输出之间的分割符, 默认空格.
OFMT 数值输出格式"%.6g".
ORS 输出之间的分割符,默认换行.
RS 输入之间的分割符,默认换行.
RLENGTH match函数匹配的字符串长度.
RSTART match函数匹配的字符串的第一个字符的位置.
内置函数
gsub(r,s,t)
index(s,t)
length(s)
match(s,r)
split(s,A,r)
tolower(s)
toupper(s)
mktime(specification)
systime()
sqrt(x)
- …(参看man awk)
控制流程语句
if ( expr ) statement
if ( expr ) statement else statement
while ( expr ) statement
do statement while ( expr )
for ( opt_expr ; opt_expr ; opt_expr ) statement
for ( var in array ) statement
continue
break