awk过滤的艺术

eg:输出文本中第一列和第三列
awk '{print $1,$3}' test.txt
$0  表示输出所有内容

eg:修饰表头和表尾
awk 'BEGIN {print "It is begin"} {print $1,$3} {print "It is end"} test.txt

eg:统计每行的其中两列的和
awk '{print $1,$3,$1+$3}' test.txt

eg:筛选某一行含有beijing字符的列
awk '$3 ~ /beijing/ {print $1,$3}'

eg:过滤字符过长,可以将命令保存到文件awk.txt中,-f指定
awk -f awk.txt test.txt

eg:只展示奇数行
awk 'NR%2==0 {next} {print NR,$0}' test.txt
NR表示当前行号
next动作表示,一旦遇到偶数行,跳过

eg:合并所有行
awk '{T=T" "$0} END {print T}' test.txt

eg:awk调用shell
awk 'BEGIN { system("ls -al")}'


awk 里的substr函数用法举例:
要截取要截取的内容1:
F115!16201!1174113017250745 10.86.96.41 211.140.16.1 200703180718
F125!16202!1174113327151715 10.86.96.42 211.140.16.2 200703180728
F235!16203!1174113737250745 10.86.96.43 211.140.16.3 200703180738
F245!16204!1174113847250745 10.86.96.44 211.140.16.4 200703180748
F355!16205!1174115827252725 10.86.96.45 211.140.16.5 200703180758
使用 awk 内置的取子串函数提取输入文件中的手机号
$ awk -F '[ !]' '{print substr($3,6)}' test.txt
13017250745
13327151715
13737250745
13847250745
15827252725
解释:
substr($4,20)     --->  表示是从第4个字段里的第20个字符开始,一直到设定的分隔符","结束.
substr($3,12,8)  --->  表示是从第3个字段里的第12个字符开始,截取8个字符结束.

awk制定某一列精确字符匹配
比如只匹配第二列数字为88的行
awk  '$2~/^88$/ {print $0}'

如果要在脚本里面调用awk,且awk里面有需要传入变量写法如下
awk  '$2~/^'$err_no'$/ {print $2}'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载 原文的排版和内容都更加友好,并且详细,我只是在这里贴出了一部分留作自己以后参考和学习,如希望更详细了解AWK...
    XKirk阅读 3,291评论 2 25
  • awk命令的基本使用 [root@shellscript ~]# head -n 3 /etc/passwd | ...
    古寒飞阅读 1,080评论 0 2
  • awk: grep,sed,awk grep:文本过滤 sed:文本编辑 awk:文本格式化工具; 1 什么是aw...
    木林森阅读 1,829评论 0 16
  • awk:报告生成器,格式化文本输出 内容: awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 a...
    BossHuang阅读 1,474评论 0 9
  • 本章主要学习内容awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 awk条件判断 a...
    楠人帮阅读 1,302评论 0 8