#每日LinuxShell小练习#05 awk-好用的数据处理工具

awk是数据处理工具。相比如sed常作用于一整行的处理,awk则倾向于将一行分为数个“字段”来处理。

因此,awk适合处理小型的数据。

awk的基本模式如下:

awk ‘条件类型1{动作1}条件类型2{动作2}‘

首先,看一段基本的代码

echo "basis exmaple pf awk"
echo "**************************"
echo "before awk###############"
last -n 5
echo "after awk################"
last -n 5 | awk ‘{print $1 "\t" $3}‘

1、awk默认使用空格或者[tab]键来分隔,分别储存在$1、$2、$3。。。中,$0代表一整行

awk有一些内置变量

内置变量名称 代表意义
NF 每一行拥有的字段总数(多少列)
NR 目前awk处理的是“第几行”的数据
FS 目前的分隔符,默认是空格或者[Tab]
echo " "
echo " "
echo "change FS"
echo "**************************"
cat /etc/passwd | awk ‘{FS=":"}  $3< 10 {print $1 "\t" $2 "\t" $3}‘
echo " "
echo "add BEGIN"
cat /etc/passwd | awk ‘ BEGIN {FS=":"}  $3< 10 {print $1 "\t" $2 "\t" $3}‘
echo "add BEGIN"
cat /etc/passwd | awk ‘ BEGIN {FS=":"}  $3< 10 {print $1 "\t" $2 "\t" $3 "\tlines:" NR "\t columes" NF}‘

1、执行第一个动作  {FS=":"} 将分隔符改为:

2、分隔符不会立即生效,需要到第二行才能生效,所以增加BEGIN关键词,这样第一行也能生效

echo " "
echo " "
echo "calculate"
echo "**************************"
echo -e "Name \t 1st \t 2nd \t 3th" > ./material/20150807awk_pay.txt
echo -e "Liu \t 26 \t 200 \t 300" >> ./material/20150807awk_pay.txt
echo -e "Wu \t\t 24 \t 210 \t 310" >> ./material/20150807awk_pay.txt
echo -e "Chen \t 24 \t 220 \t 320" >> ./material/20150807awk_pay.txt
echo -e "Zhong \t 25 \t 230 \t 330" >> ./material/20150807awk_pay.txt

cat ./material/20150807awk_pay.txt | awk ‘NR==1 {printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Total"}  #第一个动作
NR>=2 {total= $2 + $3 + $4                           #第二个动作
printf "%10s %10d %10d %10d %10.2f\n",$1,$2,$3,$4,total}‘

1、echo -e "\t"可以将tab键打印出来,如果是 echo "\t",打印出来的是\t这两个字符

2、这个实例中,存在不同的判断条件,然后紧跟着对应的动作。如果需要多个命名辅助,可利用分号或者[Enter]来分隔命令

3、与bash,shell的变量不同,在awk中,变量可以直接使用(如最后一句的total),不需要加上$符号

时间: 2024-07-28 15:06:10

#每日LinuxShell小练习#05 awk-好用的数据处理工具的相关文章

#每日LinuxShell小练习#04 find指令

今天对find指令进行练习 原材料来源于http://www.cnblogs.com/wanqieddy/archive/2011/06/09/2076785.html find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; 这个是find的基本公式 1.基本形式 find path -option 如果有两个以上的选择,则使用 -o -a -o 是或者的意思 -a 是而且的意思 比如: #!/bin/ba

#每日LinuxShell小练习#03 正则表达式

正则表达式(Regular Expression ,RE)是处理字符串的方法,它是以行为单位来进行字符串的处理行为, 通过一些特殊符号的辅助,可以让用户轻易达到查找,删除,替换某特定字符串的处理程序. #!/bin/bash if [ $# == 0 ];then echo "Please input parameters:" echo "dmesg OR txt" fi if [ "$1" == "dmesg" ];then

#每日LinuxShell小练习#02 tr命令的使用

对于文本操作,tr命令的作用很大.今天对tr功能进行初步学习. 1. tr的工作原理 tr命令不接受指定的文件参数,而只是对标准输入进行翻译 tr的命令格式是tr SET1 SET2,凡是在SET1中的字符,都会被替换为SET2中相应位置上的字符 2.简单的替换功能 tr 1 2 < ./material/20150804tr_height.txt tr ' ' '\11' < ./material/20150804tr_height.txt 3.对一系列字符进行处理 tr 'a-z' 'A-

[每日一个小技巧] CentOS 下使用yum安装一类软件包

yum 提供了丰富的工具用于支持软件包的安装. 有时候需要安装不只只是一个的情况下,可以使用groupinstall选项. 首先可以通过grouplist查询对应的group信息,比如需要安装开发工具的情况下, 可以使用以下命令: $ yum groupinstall  "Development Tools" [每日一个小技巧] CentOS 下使用yum安装一类软件包,布布扣,bubuko.com

linux-shell脚本命令之awk

[ awk简介: ] awk可以从一个文本中获取部分内容, 或者对这个文本进行排版, 使它按某种格式输出. [ awk工作流程: ] awk会把文件一行内容去到内存里, 然后对这行内容进行分段 ( 默认按空格或tab分割, $1, $2, $3... ). 再删了, 然后读取第二行内容到内存... 格式: awk '{/pattern/ command1; command2; ...}' file        # 匹配模式的这一行执行命令 例如: who | awk '{print $1}'

Python每日一个小程序

前几天上网,收集了20多道Python练习题.这些练习题还是很有价值的,正好最近忙着复习准备校招,可以用来练手.我会把每道题都写一篇博客详细阐述解题思路和源代码,在每道题目后面附上博客地址.希望大家对我的代码能给予指正,我们共同努力,共同进步.后序有好的题目或者解题思路,我还会在这篇博客后面追加. 第 0000 题:将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果 解答:[Python学习笔记]-APP图标显示未读消息数目   http

每日一水-----小光棍数

描述:最近Topcoder的XD遇到了一个难题,倘若一个数的三次方的后三位是111,他把这样的数称为小光棍数.他已经知道了第一个小光棍数是471,471的三次方是104487111,现在他想知道第m(m<=10000000000)个小光棍数是多少? 输入:有多组测试数据.第一行一个整数n,表示有n组测试数据.接下来的每行有一个整数m 输出:输出第m个小光棍数. 输入数据: 1 输出数据: 471 /*************************************************

避免老年痴呆,每日一个小程序(二)

接上篇,今天的小程序:编写程序detab,将输入中的制表符替换成适当数目的空白符(使空白充满到下一制表符停止位).假定制表符停止位的位置是固定的,比如在每个n列的位置上.n应为变量或符号参数吗?--为避免空格与tab显示难以区分,这里使用指定长度的‘*’号填充tab符号. #include <stdio.h> /*将输入的制表符替换为适当数量的‘*’ */ #define N 4 //制表符的停止位 #define MAXLENGTH 1000 //输入行最大长度 int getLine(ch

#每日Linux小练习#09 trap指令

在有些情况下,我们不希望自己的shell脚本在运行时刻被中断,比如说我们写得shell脚本设为某一用户的默认shell,使这一用户进入系统后只能作某一项工作,如数据库备份, 我们可不希望用户使用ctrl+C之类便进入到shell状态,做我们不希望做的事情.这便用到了信号处理. trap命令用来指定shell需要捕捉哪些Linux信号,以及如何处理这些信号.格式如下: trap commands signals 不同的signal之间用空格隔开,commands表示如何处理signals. ech