awk入门小记
作者:matrix 被围观: 1,290 次 发布时间:2019-11-06 分类:command Linux | 无评论 »
这是一个创建于 1029 天前的主题,其中的信息可能已经有所发展或是发生改变。
awk用于unix的文本处理,经常出现和使用。读取每一行文本进行格式化输出。
测试环境 Macos
awk简单操作
默认使用空格进行字符串分割
代码语言:javascript复制echo '1 2 3' |awk '{print $0}' # 1 2 3
echo '1 2 3' |awk '{print $3}' # 3
echo -e "1n2n3" |awk '/[23]/' #正则条件查找
echo -e "abcn1a2n33" |awk '/a/' #正则条件查找字母a
awk '{print $3}' file_path #指定文件
ls -alh|awk '/^d/' #输出目录
# drwxr-xr-x 3 panc staff 96B 7 16 23:32 pt-program
echo '1-2-3' |awk -F '-' '{print $2}' #指定分割符号 - 输出 2
0表示当前行 1表示第一个分割的字段
awk命令后面跟操作的语句字符串''
包裹,每个语句段落用花括号{}
包裹,语句段落中用分号;
分隔语句。
echo -e '1 2 3n4 5 6' |awk '{print $0;print("-end-")}'
echo -e '1 2 3n4 5 6' |awk '{print $0;}{print("-end-")}'
#上面输出结果相同
#1 2 3
#-end-
#4 5 6
#-end-
echo -e '1 2 3n4 5 6' |awk '{print $1,$3}'
#输出
#1 3
#4 6
使用内置变量
NF
表示当前行有多少个分割字段
echo '1-2-3' |awk -F '-' '{print $(NF)}' # 3 获取最后一个分割字符
echo '1-2-3' |awk -F '-' '{print $(NF-1)}' # 2 获取倒数第二个分割字符
其他变量
NR
表示当前处理的是第几行
BEGIN预处理
在执行处理之前提前设置一些信息
比如之前的-F
参数可以使用BEGIN来设置
echo -e "a-b-c" |awk 'BEGIN{FS="-"} /^a/{print $0}' #设置分割符为-
echo -e "a-b-c" |awk 'BEGIN{FS="-";print "this title::"} {print $0}' #设置输出的首行标题
echo -e "1122n3344" |awk 'BEGIN{FIELDWIDTHS="2 2";} {print $1,$2}' #固定字段宽度 (mac os中测试失败)
#输出
#11 22
#33 44
内置变量
FS字段分隔符
FIELDWIDTHS指定字段宽度
ORS指定输出的行分隔符
if逻辑处理
awk还可以支持函数和复杂的逻辑处理,完全可以在里面定义函数 调用 判断
例子:
显示红色error
绿色seccess
白色log
代码语言:javascript复制echo -e 'successnerrornsuccessnloginfo' | awk
'{
if (/error/) {
print "