awk 里的substr()

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

要截取的内容2:
2007-08-04 04:45:03.084 - SuccessfulTradeResult(status: 1, currencyPair: ‘USDJPY‘, tradeId: ‘17389681‘, clientReference: ‘20070803COVR00013176‘, tradeDateTime: ‘2007-08-03T19:45:02‘, dealerUserId: ‘PANTARHEI.API1‘, clientName: ‘PANTA RHEI SECURITIES CO LTD ‘, clientId: ‘EU0271383‘, counterpartyName: ‘DB‘, buySell: ‘S‘, nearLeftAmount: 1810000.0, nearRightAmount: 2.138696E8, nearRate: 118.16, nearValueDate: ‘2007-08-07‘)

操作指令:
 grep -v ‘errorMessage‘ ./GWDBCpTradeResponse.20070803 | awk -F‘,‘ ‘{print substr($4,20)","substr($3,12,8)","substr($2,17,6)","substr($5,18,19)","substr($9,21,2)","substr($10,12,1)","substr($11,18)","substr($12,19)","substr($13,12)","substr($14,18,10)}‘ | tr -d "‘"

取反过滤掉‘errorMessage‘

tr -d"‘"      #如果 -d 标志已经指定,则 tr 命令就会从标准输入中删除 String1 中包含的每一个字符。

截取结果:
20070803COVR00013176,17389681,USDJPY,2007-08-3T19:45:02,DB,S,1810000.0,2.138696E8,118.16,2007-08-07

解释:
substr($4,20)     --->  表示是从第4个字段里的第20个字符开始,一直到设定的分隔符","结束.

substr($3,12,8)  --->  表示是从第3个字段里的第12个字符开始,截取8个字符结束.

substr($3,6)     --->  表示是从第3个字段里的第6个字符开始,一直到设定的分隔.

时间: 05-19

awk 里的substr()的相关文章

awk截取字段--substr()

摘要: : 使用函数:substr(列,开始字符,截取长度)  第1个参数是列,第1列是$0,第2列是$1,..... 第2个参数是开始字符,从1开始 第3个参数是截取的长度   $echo "123456789" | awk '{print substr($0, 5, 2)}'   -- 注: 原文来自: [100脚本网 ] 利用函数:substr(列,起头字符,截取长度) 第1个参数是列,第1列是$0,第2列是$1,..... 第2个参数是起头字符,从1起头 第3个参数是截取的长度

牛客网 左旋转字符串,很巧妙地利用了string里面的substr(n,len)

class Solution {    public:      string LeftRotateString(string str, int n)    {            int len = str.length();             if(len == 0) return "";          n=n%len;            str+=str;             return str.substr(n,len);   //从下标n起为第一个元素,

shell脚本,awk里面的BEGIN讲解。

解释: BEGIN{}这个特殊的pattern最常用的就是 变量赋值. BEGIN这个pattern就是文件没开始读的时候 执行 awk 'BEGIN{FS=":";OFS="-"}{NF+=0}1' , 对应处理是 1:2:3  ---------> 1-2-3 读取输入分隔符,换成输出分隔符 , 但是,awk有个问题,你要是没有对字段进行操作,它是不会改变输出分隔符的, NF+=0,这个赋值屁用没有, NF值也没变 . 但是,这个对字段进行了操作 .所以会

Linux下Awk详解(转载)

什么是Awk Awk是一种小巧的编程语言及命令行工具.(其名称得自于它的创始人Alfred Aho.Peter Weinberger 和 Brian Kernighan姓氏的首个字母).它非常适合服务器上的日志处理,主要是因为Awk可以对文件进行操作,通常以可读文本构建行. 我说它适用于服务器是因为日志文件,转储文件(dump files),或者任意文本格式的服务器终止转储到磁盘都会变得很大,并且在每个服务器你都会拥有大量的这类文件.如果你经历过这样的情境--在没有像Splunk或者其他等价的工

awk 语法

awk的用法 a w k语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息 调用awk 有三种方式调用a w k, 第一种是命令行方式,如: awk –F : 'commands' input-files 第二种方法是将所有a w k命令插入一个文件,并使a w k程序可执行,然后用a w k命令作为脚本的首行,以便通过键入脚本名称来调用它. 第三种方式是将所有的a w k命令插入一个单独文件,然后调用: awk –f awk-script-file input-files awk脚本

awk的用法

前言 awk是一个模式扫描及处理语言.既然是一门语言,那么它就拥有类似于其他编程语言.所以同学们,要学好awk,必须要有shell或其他语言的编程基础,如果你没有编程基础,那么先去建立吧. 基础语法 1.awk | -F field-separator| `cmd` input file awk -F : `cmd` input file 2.将awk命令插入一个文件,并使awk程序可以执行,然后用awk命令解释器作为脚本首行. 3.将所有awk命令插入一个单独文件   awk -f awk-s

bash sed和awk

随着科技的发展,软硬件的不断更新.人们通过计算机逐渐从重复性劳动工作中解脱出来,那么计算机如何通过程序执行命令来实现我们预先设定好的步骤呢,请看下图: 一.我们知道计算机由硬件和软件组成.而软件又分为系统内核跟应用程序:当用户查看一条信息,或者编译一个程序指令,那么他的交互就由计算机通过系统内核调用程序接口,执行单一或者单一指令组成的复杂的程序组成,执行完后,又通过程序接口返回到内核通过输入输出设备呈现在大家面前. 二.程序接口按照他们的语法和编译方式将程序汇编或者调用成系统内核可以识别的指令进

AWK详细用法

awk非常的优秀,运行效率高,而且代码简单,对格式化的文本处理能力超强.基本上grep和sed能干的活awk全部都能干,而且干得更好. 先来一个很爽的例子:文件a,统计文件a的第一列中是浮点数的行的浮点数的平均值.用awk来实现只需要一句话就可以搞定(当然,这个东东用python也可以很轻松的实现,只是无论如何都得新建一个文件:别妄想用bash shell来做,那可是浮点数!!!)$cat a1.021 331#.ll   442.53 6ss    7awk 'BEGIN{total = 0;

awk中使用shell变量

其实在awk里,是不能直接使用shell变量的 方法是:awk -v 选项让awk 里使用shell变量 TIME=60 awk -v time="$TIME" 'BEGIN{FS="|"} {if ($7>time) print $2 }' 这样要注意:在awk里,time不能加$符号. 网上说如下方法都可行: 一:"'$var'" 这种写法大家无需改变用'括起awk程序的习惯,是老外常用的写法.如: var="test&quo