awk使用教程(个人整理,收集了N多资料,应该是最全的)

本文提供了一份全面的awk使用教程,涵盖了数组的length方法、排序、有序与无序遍历,还包括判断键值存在、删除键值的操作。通过示例讲解如何在shell脚本中调用awk处理输入流,并探讨了在命令行中处理特殊字符的挑战。
摘要由CSDN通过智能技术生成
转发请注明出处

awk是一个快捷脚本
首先我们先认识hello_word吧
$ echo "hello_world" | awk '{print $0}'
hello_world
一 、怎么调用awk
1. 命令行形式
cat test |awk '{print $0}'
awk '{print $0}' test
两种形式都可以
2. shell脚本 shell脚本是是awk命令
创建一个shell脚本 我弄的是awk.sh 内容如下:
#!/bin/bash
awk '{print $0}' $*
3. 单独弄个awk脚本 里面不包含awk这个就是纯‘{}’里面的内容
里面的内容必须加大括号
{print $0}

这里建议做成shell或者单独弄个文件,避免重复工作

二.awk结构
awk 【参数选项】 ‘
# 定义变量 empty_row_count awk开始运行一遍
BEGIN{

}
# 如果是空行,则 empty_row_count+1 每个记录运行一遍
【匹配】{

}
# 打印变量 empty_row_count 最后运行输出
END{

}’ files

一)、选项参数说明:
主要是的:
1. -F fs or --field-separator fs
指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:
awk 默认每行是以‘ [ \t]+’分割的(就是输入域分隔符FS,连续多个空格为一个分割), 行分隔符是以'\n'回车(RS)
文本如下:
第1,2,3行是2个空格分割, 第4行是tab分割
更改分隔符eg1: awk '{print NF}' t2 用默认进行分割 第一行分割为2个域 最后一行也是2个行,
修改下用空格做分割:awk -F "[ ]" '{print NF}' t2 第一行变成了3个域 最后一行没有分割
如何用两个符号一起分割比如两个空格来分割,一个空格不算分割
awk -F "[ ][ ]" '{print NF}' t2
awk -F " |" '{print NF}' t2 都可以表示 只用两个空格来表示分隔符【】表示里面的符号选一个, |表示或
如何表示用两个符号都可以作为分隔符比如我用a或者b分割
awk -F "[ab]" '{print NF}' t2
awk -F "a|b" '{print NF}' t2
2. -v var=value or --asign var=value
赋值一个用户定义变量
这里注意 -v 引用$var 一定加引号。。。 我不懂shell 别笑话
以下也可以使变量带入 但是从{}执行体才可以带入,BEGIN{}没有带入, var="$var" 一定跟在awk 之后 文件之前

网上说如下方法都可行:
一:"'$var'"
这种写法大家无需改变用'括起awk程序的习惯,是老外常用的写法.如:
var="test"
awk 'BEGIN{print "'$var'"}'
这种写法其实际是双括号变为单括号的常量,传递给了awk.
如果var中含空格,为了shell不把空格作为分格符,便应该如下使用:
var="this is a test"
awk 'BEGIN{print "'"$var"'"}'
二:'"$var"'
这种写法与上一种类似.如果变量含空格,则变为'""$var""'较为可靠.
三.把括起awk程序的''变为"",使用"$var"
如:
$var="this is a test"
awk 'BEGIN{print "$var"}"
这是因为在""里$是特殊字符,而在''里$是普通字符.
四:export 变量,使用ENVIRON["var"]形式,
如:
$var="this is a test";export $var
awk 'BEGIN{print ENVIRON["var"]}'

3. -f scripfile or --file scriptfile
从脚本文件中读取awk命令
上一章节已经说了

注释:
注释有两种方式, 一个是# ,一个是/*xxxxxx*/


二)、基础结构
分为BEGIN模块 {}中间模块 END结束模块
三)、内部运算符
运算符
描述
= += -= *= /= %= ^= **=
赋值
?:
C条件表达式
||
逻辑或
&&
逻辑与
~ ~!
匹配正则表达式和不匹配正则表达式
< <= > >= != ==
关系运算符
空格
连接
+ -
加,减
* / %
乘,除与求余
+ - !
一元加,减和逻辑非
^ ***
求幂
++ --
增加或减少,作为前缀或后缀
$
字段引用
in
数组成员
假如我要判定aaa在整个文件中,这里注意数组是以字典形式存储,什么都可以,不像C++, 查询时候也是查询是否在字典中,而不是字典对应的值

四)、内部函数
1、算术函数查询
函数名
说明
atan2( y, x )
返回 y/x 的反正切。
cos( x )
返回 x 的余弦;x 是弧度。
sin( x )
返回 x 的正弦;x 是弧度。
exp( x )
返回 x 幂函数。
log( x )
返回 x 的自然对数。
sqrt( x )
返回 x 平方根。
int( x )
返回 x 的截断至整数的值。
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值