UNIT35 awk Action

.格式化输出

1.print 为无格式输出语句:

print expr1,expr2,...,exprN

print 语句显示每个表达式的串值,默认的ORS 和OFS 分别为\n 和Blank。

# ps -e |  awk ‘/ tty5 /  {print “tty05: ”  $4}’看终端5的用户现在干什么

tty05:  find

2.printf 为格式化输出语句(用法同C语言)

printf format,expr1,expr2,...,exprN  //format是规格说明,语法与C 语言类似

使用printf 时,不会自动输出ORS,必须自己在format 中使用\n 来显式地产生。

# awk 'BEGIN{printf "%f\n",999}'   以符点数显示结果999.000000

# echo "65" | awk '{printf "%c\n",$0}' 以ASCII码显示65即A

awk 'BEGIN{printf "%c\n",65}'        以ASCII码显示65即A

# awk ‘{printf “uname: %-8s ID: %6d\n”, $1, $3}’ employees

uname:  Tom                ID:   4424

3.awk字符串连接与数字互转

awk中数据类型,是不需要定义,自适应的。 有时候需要强制转换。我们可以通过下面操作完成。

awk字符串转数字

$ awk 'BEGIN{a="100";b="10test10";print (a+b+0);}'

110

只需要将变量通过”+”连接运算。自动强制将字符串转为整型。非数字变成0,发现第一个非数字字符,后面自动忽略。

awk数字转为字符串

$ awk 'BEGIN{a=100;b=100;c=(a""b);print c}'

100100

只需要将变量与””符号连接起来运算即可。

awk字符串连接操作

$ awk 'BEGIN{a="a";b="b";c=(a""b);print c}'

ab

$ awk 'BEGIN{a="a";b="b";c=(a+b);print c}'

0

字符串连接操作通”二“,”+”号操作符。模式强制将左右2边的值转为 数字类型。然后进行操作。

.重定向和管道

#awk 'BEGIN {FS = ":"}{print $1 | "sort"}' /etc/passwd

.流控语句(C 语言相似的流控)

1.条件语句

 

# awk '{if (NF > max) max = NF}END {print max}'              所有输入行之中字段的最大个数

# awk -F: '{if($2~/15026736523/) print $0}' list.txt         匹配第二域,并显示该记录

# awk -F: '{if($2=="15026736523")print $0}' list.txt         精确匹配$2的值

# awk -F: '{if($1 < $2) print $0}' list.txt                  判断$1小于$2的记录并print

# awk -F: '{if ($1~/360/ || $2 ~/150/)print $0}' list.txt    匹配任何一个,并集

# awk '{if (NR>0 && $1~/3605656/)print $0}' list.txt         匹配if条件

# awk 'BEGIN{var="200"} {if ($1<var) print $0}' list.txt     利用begin赋值

# awk '{if($1=="baoping"){$2=$2+1};print $2}' list.txt       算术运算

# awk '{if($1=="baoping") $2="1986";print $2}' list.txt      重新赋值并显示所有$2

# awk '{if($1=="baoping") {$2="1986";print $2}}' list.txt    重新赋值并显示单个$2

# awk '{if ($1<QQ) print $0}' QQ=360565687 list.txt           传递参数给awk使用

2.程序控制

3.循环(for循环中间隔符为“;”而不是“,”)

 

awk '{for(i=1;i<100;i++){if($i ~/UN=/){print $2"\t"substr($5,2)" "$8" "$i}}}' kkk.txt

   //使用标准风格的for语句

awk 'a=0;{for(i=1;i<=NF;i++)a+=$i;b=a/NF;print b}' 1.txt //求a.txt每行的平均值

awk '{for(i=1;i<=NF;i++)a[i]+=$i}{if(NR==3){for(i=1;i<=NF;i++){print a[i]/NR}}}' 1.txt

   //计算一列的平均值

一段文字,每两个单词之间有空格,让所有重复的单词只剩一个? 比如
ABC fff ddd ABC
eee ABC 替换后只剩下第一个ABC。

#! /bin/awk -f

{

      for (i = 1; i <= NF; i++)

{

                ++word[$i]

                if (word[$i] == 1)

                printf(”%s “, $i)

}

printf(”\n”)

}

# chmod u+x t.sh

# ./t.sh <your_file_name_here>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.本讲引用文件list.txt

54786542:13744232156

360565687:15026736523

360565687:13597572727

100000:13898754555

100000:13898754555

1510121:155554215544:TTTa

baoping207

19862009

19862007

baoping2007

Malist

dj121M112d12nmm

tete

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值