|
Awk是为高级文本处理而设计的非常强大的工具。它逐行搜索扫描文件,将输入的每行分割成字段,将输入行或字段与模式进行比较,并对匹配的结果执行操作。本节将使用sub和gsub函数和awk命令来删除文件中的制表符和空格。我们将使用以下文本文件作为本文中所有示例的输入文件: [root@localhost ~]# cat << EOF >> content.txt C" C& K; T& V * i' k4 |; ^* \8 ~" [4 N <以上代码可复制粘贴,可往左滑>出现大于号时将以下内容复制到终端,将文本内容保存到content.txt文件中。 hitesh engineer sales 30000) A& e, y' Z9 D; M& V8 F* ? jayesh director account 25000' n3 ?& s4 Y5 b s8 K vyom manager purchase 20000 bhavesh engineer sales 30000% s1 a5 |% D7 e/ n/ I rajesh directory sales 400002 B3 m1 T7 z6 u. w) z6 v niraj clerk account 20000 jay peon purchase 23000% v, S E0 S8 K% m6 ` n deep clerk sales 20000 EOF <以上代码可复制粘贴,可往左滑> 4 h- W" P$ s3 `# \8 J
[root@localhost ~]# awk NF content.txt - o# B- T9 e5 ?, x8 I <以上代码可复制粘贴,可往左滑>
使用awk命令在文件开头找到一个或多个空格或制表符并删除。可以使用以下命令: [root@localhost ~]# awk '{ sub(/^[ \t]+/, ""); print }' content.txt" E( r% r4 X) l$ Q; S Y <以上代码可复制粘贴,可往左滑> 4 W: ?5 |& [" x! ]7 O0 b4 h
删除末尾的空格和制表符可以使用下面的命令:0 t; E5 d- `9 {5 R [root@localhost ~]# awk '{ sub(/[ \t]+$/, ""); print }' content.txt <以上代码可复制粘贴,可往左滑> 同时查询开头和末尾的空格和制表符,可以使用下面命令:+ V" C0 b5 U' T1 i [root@localhost ~]# awk '{ gsub(/^[ \t]+|[ \t]+$/, ""); print }' content.txt <以上代码可复制粘贴,可往左滑>6 _7 M- | f1 W; t' E9 \# l gsub函数表示满足条件,替换所有的匹配字符。 倒序列出文件中的所有行 它记录数组中的所有行,并将它们以相反的顺序排列。使用以下命令: [root@localhost ~]# awk '{ b[i++] = $0 } END { for (j=i-1; j>=0;) print b[j--] }' content.txt <以上代码可复制粘贴,可往左滑> & u; }4 f, Q% `. H# q
使用以下命令使用NF内置变量对非空行进行编号:0 L' R1 r* z) s: h3 c/ c: k [root@localhost ~]# awk 'NF { $0=++a ": " $0 }; { print }' content.txt ) c+ e7 ^ O/ Y: v$ p' ~, m <以上代码可复制粘贴,可往左滑> 3 e" F6 w2 y# F% k) t9 x
使用以下命令来打印包含engineer的总行数:0 `$ W9 F3 {8 R" K7 C [root@localhost ~]# awk '/engineer/{n++}; END {print n+0}' content.txt% `& S# y+ A+ L <以上代码可复制粘贴,可往左滑>
下面实例中,筛选出含有 engineer字符串的行: [root@localhost ~]# awk '/engineer/' content.txt * K5 x6 s3 V4 K. e$ S <以上代码可复制粘贴,可往左滑> ) h$ v, D+ U1 c! z( y" @8 b
) O: n3 q* a1 Q, O1 j+ j @2 ]& t 打印与指定字符串不匹配的行: }# T C2 j2 b; ~下面实例中,打印不包含字符串 jayesh 的行:, f4 ^( u1 h s! E% ]: V0 E9 | H [root@localhost ~]# awk '!/jayesh/' content.txt <以上代码可复制粘贴,可往左滑>
% s2 n& F! h* P3 Z* Z% S' h 替换字符串5 n3 ^$ i% N4 p: Z: u& B: o实例一:将content.txt中的字符串“ engineer”替换为“ doctor”,用到gsub()函数: [root@localhost ~]# awk '{gsub(/engineer/,"doctor")}{print}' content.txt ' F. c L/ o; v+ o j <以上代码可复制粘贴,可往左滑> " g1 h$ o3 Z/ f' x1 n$ R0 E
5 t9 r' K' u" P, \: _$ A; `, X2 H 实例二:查找字符串“ jayesh”,“ hitesh”或“ bhavesh”,并将其替换为字符串“ mahesh”,运行以下命令:[root@localhost ~]# awk '{gsub(/jayesh|hitesh|bhavesh/ , "mahesh"); print}' content.txt <以上代码可复制粘贴,可往左滑>
可以将awk命令与df一起使用,只显示设备名称和可用空间、使用率。 [root@localhost ~]# df -h | awk '{printf("%-24s \t %-6s \t %-4s \n",$1,$4,$5)}'+ a9 n3 N7 N) J, r2 ~! @ <以上代码可复制粘贴,可往左滑>
如果认为服务器受到攻击,那么这种awk单行代码非常有用。它将显示服务器的打开连接列表,并按数量对它们进行排序。 [root@localhost ~]# netstat -ntu|awk '{print $5}'|cut -d: -f1|awk '/[0-9]/'|sort|uniq -c|sort -n <以上代码可复制粘贴,可往左滑> U5 L9 q' X4 Y2 j+ }! v: A9 r1 R
; P1 e5 B. Y6 S+ V! f* A 总 结我们通过实际示例了解如何使用一行awk命令执行日常任务。 |
微信公众号
手机版