awk àì夳堔傛蜴生んèń 2022-08-06 15:29 171阅读 0赞 目录 简介 1 命令格式&说明 2 调用方法 3 域切分&操作 3 正则匹配 4 内置变量&操作 5 内置函数&操作 6 格式化输出 7 数组 8 条件判断&流程控制 9 与shell交互 10 awk与变量 10 错误排查 11 其他 11 ## 简介 ## <table style="color:rgb(0,0,0); font-family:Arial; font-size:14px; line-height:26px; text-align:left"> <tbody> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> AWK: 三位创造者Aho、Weinberger和Kernighan统称</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 官方定义:一个优秀的样式扫描与处理工具</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 定位:AWK 是一种用于处理文本的编程语言工具,主要用于格式化报文或从一个大的文本文件中抽取数据。提取原来文本中行的某些域进行计算组合显示,出结果</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#333333"> </span></p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#333333">【扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行,</span> 直到文件末尾<span style="color:#333333">】</span></p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#333333"> </span></p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> [Shell过滤工具中最难掌握的,语法复杂,错误提示不明确]</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 优点:</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 1.处理文件中的记录(与数据库相比)</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 2.简单,解释执行,不必编译(与C相比)</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 3.容易获得,unix自带(whereis awk)</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 模式和动作</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 模式部分决定了动作语句何时触发及触发的事件【处理语句】</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 模式部分可省略,则动作对每一行执行;模式部分可以是任何条件语句、复合语句、正则表达式</p> </td> </tr> </tbody> </table> **命令格式及说明** <table style="color:rgb(0,0,0); font-family:Arial; font-size:14px; line-height:26px; text-align:left"> <tbody> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 格式:</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 语法组成:【查找 -à 执行处理】</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘pattern{action}’ filename</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 【注意,pattern在非括号中,用于查询筛选匹配行,action在括号中,action 是在找到匹配内容时所执行的一系列命令,用于对筛选后的内容进行处理】</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 其中action内容可扩充,也可以有多个action。<br> 执行顺序:awk一行行读入输入文件,顺序执行‘’内内容,按模式匹配来采取动作。<br> 其他调用:awk可用内部变量和函数,条件与循环语句,也可执行数学运算和字符串操作。此外,可以使用BEGIN和END来执行处理前预操作和处理后后继操作。<br> <br> </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 格式:</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk [ -F re] [parameter...] ['prog'] [-f progfile]</p> </td> </tr> </tbody> </table> <table style="color:rgb(0,0,0); font-family:Arial; font-size:14px; line-height:26px; text-align:left"> <tbody> <tr> <td colspan="2"> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 参数说明:</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> -F re</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 允许awk更改其字段分隔符,默认空格</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> A.-F参数后紧跟单个分隔符,则用双引号“”,例如 –F”+”<br> B.-F参数后紧跟多个分隔符,则用单引号‘ ’并用[ ],中间顺序无所谓,例如-F’[+$]’</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> parameter</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 该参数帮助为不同的变量赋值</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 'prog'</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk的程序语句段。这个语句段必须用单拓号:'和'括起,以防被shell解释</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> -f progfile</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 允许awk调用并执行progfile指定有程序文件</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> progfile是一个文本文件,他必须符合awk的语法</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> in_file</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk的输入文件,awk允许对多个输入文件进行处理。</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 值得注意的是awk不修改输入文件。</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 如果未指定输入文件,awk将接受标准输入,并将结果显示在标准输出上。</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk支持输入输出重定向。</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> BEGIN{….}</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> {…..}</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> END{……}</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 1 位置:’{}’</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 2 作用:BEGIN和END的作用是给程序赋予初始状态和在程序结束之后执行一些扫尾的工作</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> BEGIN{}:awk开始扫描输入之前执行 (显示变量和预置(初始化)变量 )</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> END{}:在扫描完全部的输入之后执行 (最终结果 )</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> {}:操作</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> BEGIN部分:设置计数和打印头</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> END部分:打印输出文本总数及结尾状态标识</p> </td> </tr> </tbody> </table> **调用方法** <table style="color:rgb(0,0,0); font-family:Arial; font-size:14px; line-height:26px; text-align:left"> <tbody> <tr> <td colspan="2"> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 调用方式:</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 1</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 命令行; 普通UNIX命令 ,用于解决简单的问题</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 2</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 利用命令解释器调用awk程序;</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 写入脚本文件,并在首行加入#!/bin/awk –f ,执行之</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 3</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 使用-f选项调用awk程序</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 所有awk插入一个单独文件然后调用</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk –f awk-script-file input-files</p> </td> </tr> </tbody> </table> ## 域切分及操作 ## <table style="color:rgb(0,0,0); font-family:Arial; font-size:14px; line-height:26px; text-align:left"> <tbody> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 域的切分:</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> A#B#C#D </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 分隔符为#,则 $1:A $2:B ……注意,所有域为 $0</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 【print隶属于action,所以一定要放在{}中】</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk中,缺省的情况下总是将文本文件中的一行视为一个记录,而将一行中的某一部分作为记录中的一个字段。用$1,$2,$3...这样的方式来顺序地表示行(记录)中的不同字段,$0表示整个行(记录)</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 示例:</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 1. 打印所有行</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{print $0}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 2. 打印所有第二个字段</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{print $2}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 3. 打印第一列和最后一列,并且中间有分隔符</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{print $1,$NF}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 4. 打印行号,第一列和最后一列,中间无分隔符</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{print NR $1 $NF}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 5. 打印包含报头</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘BEGIN{print “NAME AGE”}{print $1,$7}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 6. 打印包含尾部</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘BEGIN{print “NAME AGE”}{print $1,$7} END{print “END_OF_REPORT”}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 7. 增加一个域【原来只有11个域】</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{$12=”AAA”;print $0}’ data</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 则显示结果中自动多了一个域</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 8. 修改文本域</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk '{if($1=="M.Tansley") $1="feidd";print $0}' awk.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 9. 只显示修改的记录</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{if($1==“M.Tansley”) {$1=“feidd”;print $0}}’ awk.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> (区分和修改文本域的区别)</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 10.awk ‘{(tot+=$6)};END {print tot}’ awk.txt(只打印tot值)</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘(tot+=$6);END {print $0“\n”tot}’ awk.txt(打印所有域)</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 11.awk ‘{print “hello”,”there”,”Jim”}’</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 打印 hello there Jim</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 设置域变量&域值比较</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 1. 设置输入域到域变量名</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{name=$1;belts=$4;if(belts ~/Yellow/) print name}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 注:设置了 变量直接输出就是了,不需要使用$进行获取,否则拿不到东西,懂?</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 2. 域值比较</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{if($6<27) print $0}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 3. 设置对所有记录有效的全局域变量【全局变量放在BEGIN中】</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘BEGIN{LINE=”27”}{if($6<LINE) print $0}’ data.txt</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 修改域值【对原文件无影响】</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 1. 修改域值</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{if($1==”MT”) $6=$6-1;print $1,$6,$7}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 【if($1==”MT”) $6=$6-1;符合才执行,其他行都执行print $1,$6,$7】</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk '{if($1=="J.Lulu") $7=$7*2;print $1,$7}' awk.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 2. 赋新值</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{if($1==”MT”) $1=”AB”;print $1}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 3. 打印每一列并进行了统计</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘(tot+=$6);END{print tot}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 4. 只进行统计</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{(tot+=$6)};END{print tot}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 注:修改数值域取值(当在a w k中修改任何域时,重要的一点是要记住实际输入文件是不可修改的,修改的只是保存在缓存里的awk复本)</p> </td> </tr> </tbody> </table> ## 正则匹配 ## <table style="color:rgb(0,0,0); font-family:Arial; font-size:14px; line-height:26px; text-align:left"> <tbody> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 正则匹配</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 1. 模糊匹配</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk -F"^A" '{if($0 ~ /id=00001b/) print $0}' test.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 2. 精确匹配</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk -F"^A" '{if($1 == "<doc>") print $0}' 1</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 3. 不匹配</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk -F"^A" '{if($0 !~ /id=000015b/) print $0}' test.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 4. 特殊匹配</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 匹配大小写</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk '{if($4~/[Gg]reen/) print $0}' awk.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 匹配任意字符(匹配第四个字符是a的)</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk '{if($1~/^...a/) print $0}' awk.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 关系匹配(注意,使用竖线符时,语句必须用圆括号括起来)</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk '{if($4~/(Yellow|green)/) print $0}' awk.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 5. 不指定域</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> a.awk ‘/[0-9]/’ data.txt 打印记录中任意列包含数字0-9的行<br> b.awk ‘/01/||/02/’ data.txt 打印包含01或者02的行<br> c.awk ‘/01/,/02/’ data.txt 打印既包含01又包含02的行;等同awk ‘/01/&&/<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />02’</p> </td> </tr> </tbody> </table> **内置变量&操作** <table style="color:rgb(0,0,0); font-family:Arial; font-size:14px; line-height:26px; text-align:left"> <tbody> <tr> <td colspan="2"> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk内置变量</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> ARGC</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 命令行参数个数</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> ARGV</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 命令行参数排列</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> ENVIRON</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 支持队列中系统环境变量的使用</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> FILENAME</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 实际操作的文件名</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> FS</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 设置输入域分隔符,等价于命令行-F选项 Field Separator</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 可在BEGIN中进行设置,然后执行的时候均以设置的符号为分隔符</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> NF</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 浏览记录 域的个数,在记录被读取时设置【number of fields】一共有多少个域</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> NR</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 当前记录数(为全部输入文件)</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 已读取记录数【number of rows】</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 1</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 2</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 3</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 4</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> …</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 全局行数</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> FNR</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 当前文件行数,<=NR</p> </td> </tr> <tr> <td colspan="2"> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> NR与FNR区别</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{print NR,$0}’ filea fileb</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 结果:行号是连续的,不区分两个文件</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{print FNR,$0}’ filea fileb</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 结果:行号区分两个文件</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> RS</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 输入记录分隔符(默认为换行符)</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 缺省:新行\n</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> Row Separator记录分隔符</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 可以根据具体数据需求,设置读取一条记录的区间</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> OFS</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 输出域的分隔符,缺省空格</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 输出结果 print $1,$2默认加的是空格,可以在BEGIN中设置,改为其他分隔符</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> ORS</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 输出记录的分隔符,缺省:新行\n</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 整体记录的</p> </td> </tr> <tr> <td colspan="2"> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 注:可以在BEGIN中配置FS,OFS,RS,ORS已决定输入输出的分隔符【域和行的】</p> </td> </tr> <tr> <td colspan="2"> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 示例:</p> </td> </tr> <tr> <td colspan="2"> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 1. 打印文件记录数</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘END{print NR}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 2. 打印每行记录数,已读记录数,记录内容</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{print NF,NR,$0} END{print FILENAME}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 3. 打印当前所在文件夹</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> echo $PWD | awk –F / ‘{print $NF}’</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 4. 列转化成行</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 每四列转换成一行</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk '{if (NR%4==0){print $0} else {printf"%s ",$0}}' auction.xml</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 5. 行转换成列</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk 'BEGIN {RS="^A"} {print $0}' 1</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 6. 指定FS和OFS,多个分隔符<br> A.BEGIN中的FS无论是单个还是多个分隔,均用双引号“”,多个则需加[ ]<br> 例如:nawk ‘BEGIN{FS=”[\t+$]”}{print $6,$8,$9}’data.txt<br> B.BEGIN中若同时有FS和OFS,则建议中间用分号“;”来分隔开,否则提示出错<br> 例如:nawk ‘BEGIN{FS=”[\t+$]”;OFS=”%”}{print $6,$7,$8,$9}’ data.txt<br> C.半方括号[ ]也可以作为分隔符,顺序无所谓。例如:-F‘[[]]’ 或 –F‘[][]’</p> </td> </tr> </tbody> </table> **内置函数** <table style="color:rgb(0,0,0); font-family:Arial; font-size:14px; line-height:26px; text-align:left"> <tbody> <tr> <td colspan="2"> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 内置字符串函数</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#f243e">gsub(r,s)</span></p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#f243e">在整个$0</span>中用s代替r</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#f243e">gsub(r,s,t)</span></p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#f243e">在整个t</span>中用s替代r</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#f243e">index(s,t)</span></p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#f243e">返回s</span>中字符串t的第一位置</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#f243e">length(s)</span></p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#f243e">返回s</span>长度</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#f243e">match(s,r)</span></p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#f243e">测试s</span>是否包含匹配r的字符串</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#f243e">split(s,a,fs)</span></p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#f243e">在fs</span>上将s分成序列a.fs为分隔符</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#f243e">sprint(fmt,exp)</span></p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#f243e">返回经fmt</span>格式化后的exp</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#f243e">sub(r,s)</span></p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#f243e">用$0</span>中最左边最长的子串代替s</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#f243e">substr(s,p)</span></p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#f243e">返回字符串s</span>中从p开始的后缀部分</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#f243e">substr(s,p,n)</span></p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> <span style="color:#f243e">返回字符串s</span>中从p开始长度为n的后缀部分</p> </td> </tr> <tr> <td colspan="2"> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 注意:字符串一定要用双引号括起来,否则当做变量解释,找不到即为空,变成了用空值作了原字符串</p> </td> </tr> <tr> <td colspan="2"> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 示例:</p> </td> </tr> <tr> <td colspan="2"> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 1. 替换一个字符为另一个</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘gsub(/4842/,4899){print $0}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 替换字符串必须加双引号,否则当做变量处理,取到值为空,导致空值替换掉现有的东西</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> $awk –F : ‘gsub(/Mike/,”KEN”){print $0}’ data</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 只打印出存在替换操作的行</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> $awk –F : ‘{ gsub(/Mike/,”KEN”);print $0}’ data</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 打印出所有行,无论是否替换</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 2. 字符串中出现的第一位置</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{print index($0,”e”)}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 3. 长度</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{print length($0)}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 4. 匹配</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘BEGIN{print match(“ANCD”,/D/)}’ 返回结果4,即开始下标</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 若不匹配,返回0</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 5. 切分</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘BEGIN{split(“1#2#3”,myarray,”#”);print length(myarray)}’</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> $awk ‘BEGIN{STR=”1#2#3”;split(STR,myarray,”#”)}{for(x in myarray){print myarray[x]}}’</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 6. 发现并替换【注:sub函数的第三个参数不可直接用字符串,而必须用字符串变量】</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘sub(/26/,”29”,$0)’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 将字符串变量指定字符中第一个符合含有o的用0替换调</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘END{str=”How are you doing?”;sub(/o/,”0”,str);print str}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 7. 截取字符串</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘BEGIN{print substr(“abcdefg”,1,3)}’</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 8. 数学函数</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{print 2^5+sin(2.1)+int(0.9)}’ data.txt 在每一行都打印运算值(32.8632)</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 9. 大小写转换</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{print toupper($2), tolower($2)}’ data.txt<br> 10. match【打印you在字符串中第一个匹配的位置以及长度(9,9,3)】</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘END{print match(“How are you you?”,/you/),RSTART,RLENGTH}’ data.txt</p> </td> </tr> </tbody> </table> ## 格式化输出 ## 【注意要自己换行,\\n】 <table style="color:rgb(0,0,0); font-family:Arial; font-size:14px; line-height:26px; text-align:left"> <tbody> <tr> <td colspan="2"> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk使用printf进行格式化输出</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> %c</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> ASCII字符</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> %d</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 整数</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> %e</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 浮点数,可科学计数法</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> %f</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 浮点数,小数形式</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> %g</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 由awk决定使用哪种浮点数转换e或f</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> %o</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 八进制</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> %s</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 字符串</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> %x</p> </td> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 十六进制</p> </td> </tr> <tr> <td colspan="2"> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 示例</p> </td> </tr> <tr> <td colspan="2"> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 1. 字符串转换</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> echo “65”| awk ‘{printf “%c\n”,$0 }’ 将输出A</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 2. 格式化输出</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{printf ‘%-15s %s \n’,$1,$3}’ data.txt 左对齐十五个字符等长</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 参数及脚本</p> </td> </tr> </tbody> </table> ## 数组 ## <table style="color:rgb(0,0,0); font-family:Arial; font-size:14px; line-height:26px; text-align:left"> <tbody> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 数组</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 1. awk中数组的使用</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘BEGIN{split(“1#2#3”,myarray,”#”);for(I in myarray){print myarray[i]}}’</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 2. 数组</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> BEGIN{ </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> myarray[0] = “jim”</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> myarray[2] = 456</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> }</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> for(x in myarray)</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> { </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> print myarray[x]</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> }</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk -v b=$line 'BEGIN {split(b,array,"^B")} END {for(i in array) {print array[i]}}'</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 3. Awk数组(打印数组)</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> #!/bin/sh</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> cat aa.txt | while read line</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> do</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> #传入参数line的值</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> echo "aaa" | awk -v b=$line 'BEGIN {split(b,array,"^B")} END {for(i in array) {print array[i]}}'</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> Done</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk 'BEGIN {RS="^B"} {print $0}' aa.txt</p> </td> </tr> </tbody> </table> ## 条件判断及流程控制 ## <table style="color:rgb(0,0,0); font-family:Arial; font-size:14px; line-height:26px; text-align:left"> <tbody> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 数组</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> F. 流程控制:</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 1 if(){….}else{if()….}</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 2 while语句</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 3 do-while语句</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 4 for(;;){….}</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 5 exit; (不在END中,文件尾;END中,程序结束)</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> break(中断当前正在执行的循环并跳到循环外执行下一条语句);</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> continue(从当前位置跳到循环开始处执行 )</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> </p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 条件测试</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> < <= > >= == !=</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> ~匹配正则 !~不匹配正则 &&(与)、||(或)和括号()</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 1. 小于</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk '{if($6<$7) print $0}' awk.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 2. 小于等于</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk '{if($6<=$7) print $0}' awk.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 3. 大于</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk '{if($6>$7) print $0}' awk.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 4. 打印最后一个域为44的</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘$7==”44” {print $0}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 5. 打印第四个字段为G开头的</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{if($4 ~/G*/) print $0} data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 6. 打印第四字段非Brown的</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{if($4 !~/Brown/) print $0}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 7. 比较最后两个字段符合的</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{if($6 < $7) print $0 “ABC”}’ data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 8. 多条件 && || !</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{if($1 == “A” && $2==”B”) print $0}’ data.txt</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> for循环</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> for(x = 1 ; x<=4 ; x++)</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> { </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> Print “interation”,x</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> }</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> </p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> while循环</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> x=1</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> while(x<NF){ </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> print $x “\t”</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> x++</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> if(x == 2)</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> { </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> break</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> }</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> }</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> count=1</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> do while</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> do{ </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> print “”</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> }while(count != 1)</p> </td> </tr> </tbody> </table> ## 与shell交互 ## <table style="color:rgb(0,0,0); font-family:Arial; font-size:14px; line-height:26px; text-align:left"> <tbody> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 数组</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 交互</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 1. 将shell命令的执行结果送给awk处理 :</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> s=`du -k ./diff" | awk '{ print $1 }'`</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 2. shell script程序读awk的执行结果 :`` </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 在awk中执行shell命令行 :嵌入函数system()</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> END{print count;system("ls ./");}</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 传参</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 向一行awk传递参数</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{if($5<AGE) print $0}’ AGE=10 data.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk –v AGE=10 ‘{if($5<AGE) print $0}’ data.txt</p> </td> </tr> </tbody> </table> ## awk与变量 ## <table style="color:rgb(0,0,0); font-family:Arial; font-size:14px; line-height:26px; text-align:left"> <tbody> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 数组</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> Awk 变量内置变量</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 1 直接引用,不加$($NF)</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 自定义变量</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 1 用户自定义(不要与内置变量冲突)</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 2 直接引用,不加$</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 3 不需要对变量进行初始化 (默认其为字符串类型 )</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 1. 自定义</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk '{line="44"} {if($7>=line) print $1 " is best"}' awk.txt</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk ‘{if($7>=“44”) print $1 “ is best”}’ awk.txt两者相同</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 2. 运用对比</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> A.</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> $awk –F : ‘BEGIN{NAME=”123131”}{print NAME}’ data</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 打印 123131</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> B.</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> $awk –F : ‘BEGIN{NAME=”123131”}{print $NAME}’ data</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 什么都不打印</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> C.</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> $awk –F : ‘BEGIN{NAME=”123131”}{print ‘$NAME’}’ data</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 打印出所有行,应该是$NAME 变成 $0了</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> D.</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> $awk –F : ‘BEGIN{NAME=”123131”}{print “$NAME”}’ data</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 打印出$NAME</p> </td> </tr> </tbody> </table> ## 错误排查 ## <table style="color:rgb(0,0,0); font-family:Arial; font-size:14px; line-height:26px; text-align:left"> <tbody> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 错误排查</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 在碰到awk错误时,可从下面几个方面查找:</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 确保整个awk命令用单引号括起来。</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 确保命令内所有引号成对出现。</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 确保用花括号括起动作语句,用圆括号括起条件语句。</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 切记有两条规则可以帮助您避免出现语法错误:</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 1. 确保命令位于括号中,而括号位于单引号中。没有使用这些字符之一必然导致程序无法运行。</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 2. 搜索命令需要位于斜线之间。要找出住在印第安那州的员工,您必须使用“/IN/”而不是“IN”。</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 其他注意:</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> A.从window拷贝语法句到Unix中,行结尾可能有不识别的字符会导致语法错误<br> B.写script文件时,BEGIN或END后必须紧跟{ <br> C.所有action语句必须放在{ }中,否则提示语法错误。例如不可直接写print<br> D.单独的赋值或pattern条件句没有{ }则默认print $0;例如{ }外面的i=1<br> E.if条件块必须放在action中,也就是必须要有{ }来包含<br> F.条件的判断“相等”须用= =,而不是=(赋值);例如,if($1= =100)<br> G.输出多列须用“,”(逗号)隔开;for循环中间隔符为“;”而不是“,”</p> </td> </tr> </tbody> </table> ## 其他 ## <table style="color:rgb(0,0,0); font-family:Arial; font-size:14px; line-height:26px; text-align:left"> <tbody> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 其他</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 调用脚本</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> stu.awk</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> !/bin/awk –f</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> BEGIN{ </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> print”ABC”</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> print “DEF”</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> }</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> {total+=56}</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> END{ </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> print “Total” total</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> print “AVG” total/WR</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> }</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 自定义函数</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 定义方法如下:</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> function 函数名(参数表){ </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 函数体</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> }</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 直接调用,但不执行参数有效性检查 (多余的参数会被awk所忽略,而不足的参数,awk将它们置为缺省值0或空字符串 )</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 返回值:return 返回值</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 重定向输出和特别函数getline实例</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> a.awk ‘{print FILENAME,$0}’ data1.txt data2.txt >data_all.txt<br> 把第一个文件和第二个文件合并到data_all.txt中,新文件第一列为原始文件名,后面列为原始文件内容。<br> b.awk ‘$1!=fd{close(fd);fd=$1} {print substr($0,index($0,“ ”)+1)>$1}’ data_all.txt<br> 把合并后的新文件data.txt重新拆开成原来的两个子文件,依照新文件的第一列来产生新文件名。生成一个完整子文件后,关闭之;再生成下一个子文件。<br> A.getline从整体上来说,应这么理解它的用法:<br> 当其左右无重定向符 | 或 < 时,getline作用于当前文件,读入当前文件的第一行给其后跟的变量 var 或$0(无变量);应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的。<br> 当其左右有重定向符 | 或 < 时,getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。<br> B.getline用法大致可分为三大类(每大类又分两小类),即总共有6种用法。代码如下:<br> nawk ‘BEGIN{“cat data.txt”|getline d; print d}’ data2.txt<br> nawk ‘BEGIN{“cat data.txt”|getline; print $0}’ data2.txt<br> nawk ‘BEGIN{getline d < “data.txt”; print d}’ data2.txt<br> nawk ‘BEGIN{getline < “data.txt”; print $0}’ data2.txt<br> 以上四行代码均实现“只打印data.txt文件的第一行”(若打印全部行,用循环)<br> eg. nawk ‘BEGIN{FS=”:”;while(getline<”/etc/passwd”>0){print $1}}’ data.txt<br> nawk ‘{getline d; print d”#”$3}’ data.txt<br> awk首先读入第一行,接着处理getline函数,然后把下一行指定给变量d,再先打印d,由于d后面有换行符,所以后面紧跟的#会覆盖d,后面的$3同样也会覆盖d。<br> nawk ‘{getline; print $<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />0”#”$3}’ data.txt<br> awk首先读入第一行接着处理getline函数,然后把下一行指定给$0,现在的$0已经是下一行内容,后面的#和$3(从$0中取)会覆盖$0的内容。<br> c.nawk ‘BEGIN{system(“echo \”input your name:\” ”);getline var; print “\nYour name is”,d,”\n”}’<br> 系统提示输入名字,然后将输入的名字打印出来。特别注意:该awk语句后没有输入文件名,而是利用键盘输入作为文件名</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 一个例子</p> </td> </tr> <tr> <td> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 从一个有6千多万行的文件中,每6千行提取一行;<br> 解决:</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 第一种方法:<br> lineNum=0;<br> while read line<br> do<br> if [ $((lineNum++%6000)) -eq 0 ]; then<br> echo $line<br> fi<br> done<$inputFile<br> <br> </p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> 第2种方法:</p> <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px"> awk '(NR%6000==0){print $0}' $inputFile</p> </td> </tr> </tbody> </table>
相关 [awk] Linux awk命令相关使用 前言: awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分 淡淡的烟草味﹌/ 2023年06月30日 02:23/ 0 赞/ 44 阅读
相关 awk substr awk substr echo 123 | awk '{ print substr( "hello world", 我不是女神ヾ/ 2022年12月21日 00:50/ 0 赞/ 150 阅读
相关 AWK 详解 AWK 详解 awk 用法:awk ' pattern \{action\} ' 变量名 含义 ARGC 命令行变元个数 ARGV 命令行变元数组 FI 淩亂°似流年/ 2022年08月24日 04:22/ 0 赞/ 196 阅读
相关 awk 目录 简介 1 命令格式&说明 2 调用方法 3 域切分&操作 3 正则匹配 4 内置变量&操作 5 内置函数&操作 6 格式化输出 7 数 àì夳堔傛蜴生んèń/ 2022年08月06日 15:29/ 0 赞/ 172 阅读
相关 awk笔记 awk: awk名来:三个人名的缩写,他们是:Aho、(Peter)Weinberg 和(Brain)Kernighan; 行处理时可以处理行内字段,这是gre ゝ一纸荒年。/ 2022年08月06日 15:23/ 0 赞/ 171 阅读
相关 awk awk awk兼具sed的所有功能,而且还支持分段 截取文档中某个段 打印文档中的某段,-F作用是指定分隔符 ![201804280524311 爱被打了一巴掌/ 2022年05月26日 08:13/ 0 赞/ 185 阅读
相关 awk详解 awk是linux中处理文本的强大工具,或者说是一种专门处理字符串的语言,它有自己的编码格式。awk的强大之处还在于能生成强大的格式化报告。 awk的命令格式如下: ! 绝地灬酷狼/ 2022年05月16日 09:57/ 0 赞/ 209 阅读
相关 AWK详解 AWK 简介 AWK是一种优良的文本处理工具。它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始 浅浅的花香味﹌/ 2022年01月19日 02:37/ 0 赞/ 307 阅读
相关 awk awk -------------------- Awk文本处理 1.进行逐行扫描文件(或流), 从第一行到最后一行 2.寻找匹配的特定模式的行,在行上进行 我就是我/ 2021年12月16日 03:49/ 0 赞/ 280 阅读
相关 awk awk:一门语言,过滤内容(取列),打印,删除 awk '\{print $1\}' 文件 例如,文件如下: \[root@wuyike ~\]\ cat awk.txt 水深无声/ 2021年09月20日 05:58/ 0 赞/ 379 阅读
还没有评论,来说两句吧...