linux_awk(一)

Posted 未央夜色

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux_awk(一)相关的知识,希望对你有一定的参考价值。

综述

是linux的shell三剑客之一:

  • grep 查找
  • sed 编辑
  • awk 数据分析

awk本身也是一门语言,是linxu中处理字符文本的强大工具,结合sed,grep能产生强大的效果。
每个程序都是一个或多个模式动作序列。每个模式一次匹配文本的每一行。直到输入完毕。
都是用 shell 后有号,awk一般不使用号。
简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。灵活性是awk最大的优势。

后续的演示和学习都用下面的例子进行,分别是awk1.txt和awk2.txt

// example1  awk1.txt
Proto Recv-Q Send-Q Local-Address          Foreign-Address             State
tcp        0      0 0.0.0.0:3306           0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:80             0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:9000         0.0.0.0:*                   LISTEN
tcp        0      0 coolshell.cn:80        124.205.5.146:18245         TIME_WAIT
tcp        0      0 coolshell.cn:80        61.140.101.185:37538        FIN_WAIT2
tcp        0      0 coolshell.cn:80        110.194.134.189:1032        ESTABLISHED
tcp        0      0 coolshell.cn:80        123.169.124.111:49809       ESTABLISHED
tcp        0      0 coolshell.cn:80        116.234.127.77:11502        FIN_WAIT2
tcp        0      0 coolshell.cn:80        123.169.124.111:49829       ESTABLISHED
tcp        0      0 coolshell.cn:80        183.60.215.36:36970         TIME_WAIT
tcp        0   4166 coolshell.cn:80        61.148.242.38:30901         ESTABLISHED
tcp        0      1 coolshell.cn:80        124.152.181.209:26825       FIN_WAIT1
tcp        0      0 coolshell.cn:80        110.194.134.189:4796        ESTABLISHED
tcp        0      0 coolshell.cn:80        183.60.212.163:51082        TIME_WAIT
tcp        0      1 coolshell.cn:80        208.115.113.92:50601        LAST_ACK
tcp        0      0 coolshell.cn:80        123.169.124.111:49840       ESTABLISHED
tcp        0      0 coolshell.cn:80        117.136.20.85:50025         FIN_WAIT2
tcp        0      0 :::22                  :::*                        LISTEN

// example2 awk2.txt
Beth 4.00 0
Dan 3.75 0
Kathy 4.00 10
Mark 5.00 20
Mary 5.50 22
Susie 4.25 18

语法

使用 模式-动作 语句
ex:

awk ' $3 > 0 print $1 $2 $3 FS= " " ' awk1.txt
  • awk 指明使用的是awk程序
  • awk1.txt 对awk1.txt文本进行操作
  • ‘xxxx’ 模式动作模块
  • $3 > 0模式。利用该模式扫一遍所有的行。
  • print xxx 动作。对符合条件的进行动作。
  • FS 指定内建变量

主要分成四部分:

  • awk命令
  • 操作的文本:可以有多个
  • 模式:可以没有
  • 动作:放在里
    模式-动作部分被’ ‘单引号包围,可以方便的放在shell中使用。
    在awk中可以指定分隔符(默认是空格)
// 指定singla为默认分隔符
awk -F singal xx

模式

用来选择符合要求的行。也可以没有模式,只有动作。
通过列来选择行。
nn1 0表示所有的行

// 选择第三列值>3的所有行
$3>0      
// 选择所有内容 
$0
// == 选择指定内容的
$1 = "Mark"
// 使用与或非等逻辑运算
$1 == "Mark" || $1 == "Mary"
!($3>0)  

动作

print

在print中可以进行数据运算,添加打印内容,添加空格等操作

// 打印所有内容
print $0
// 打印第n列
print $n
// 打印字段的个数(number of field)
print NF
> print NF $1
> 3xxxx
// 打印最后一个字段
print $(NF-1)
// 打印行号(number of row)
print NR $0
> print NR $1
> 1 xx
// 输出排序后的内容
print $2 | sort -n

ifelse

if(exp)
sentence1
else
sentence2

循环

  • while
    while(exp)
    sentence

  • for
    for(var in seq)
    sentence

  • do
    do sentence
    while (condition)

运算符

>
<
==
>=
!=
||
&&
~
~!

内建变量

$0 所有内容
$N 第N列
FS    输入字段(列)分隔符。指定输入字段的分隔符
NF   当前字段的个数(列数)
NR   添加行号
FNR 每个文件各自的行号
RS   输入的记录(行)分隔符
OFS 输出字段分隔符
ORS输出记录分隔符

文件操作

awk 'NR!=1 print  $n> "输出文件名"' file

IO

  • next
    如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。next语句一般用于多行合并:
// 遇到行号是偶数就跳过
awk 'NR/2 == 1nextprint NR,$0 ' awk1.txt
  • getLine
    1行读取成功:返回1
    到文件末尾:返回0
    异常:返回-1
// 获取时间并输出
awk 'BEGIN'date' | getline out;print out' test
  • close
    关闭文件

以上是关于linux_awk(一)的主要内容,如果未能解决你的问题,请参考以下文章

linux_awk

linux_awk

Flask---钩子函数

c# Dictionary的遍历和排序(转)

C++怎样将一个数插入到数组末尾?

SQL语句 Decimal如何去掉末尾无用的0