想把sed 's/\+\+\+ \/tmp\/.*\.tmp/\.$3/g'移到awk里面使用,这个$3是awk里的变量。awk的坑,我踩了。
awk '{cmd="sed ' " ' " 's/\+\+\+ \/tmp\/.*\.tmp/\.$3/g' " ' " ' "; system(cmd)}' 失败
想把sed 's/\+\+\+ \/tmp\/.*\.tmp/\.$3/g'移到awk里面使用,这个$3是awk里的变量。awk的坑,我踩了。
awk '{cmd="sed ' " ' " 's/\+\+\+ \/tmp\/.*\.tmp/\.$3/g' " ' " ' "; system(cmd)}' 失败
awk
===========
awk 一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。
处理流程:(以行为处理单位)
通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本
语法格式:
1\\ awk [options] 'script' var=value file(s)
2\\ awk [options] -f scriptfile var=value file(s)
# 注意:
以单引号来界定script, 因此内部最好用双引号
'script',即两部分组成:'{pattern + action}'。pattern-模式:表示 awk 在数据中查找的内容,action-操作:是在找到匹配内容时所执行的一系列命令。
调用方式:
(1) awk 命令行
用于解决简单的问题。当然,你也可以在shell script 程序中引用awk 命令行甚至awk 程序脚本。
(2) 使用-f 选项调用awk 程序
awk 允许将一段awk 程序写入一个文本文件,然后在awk 命令行中用-f 选项调用并执行这段程序。
(3) 利用命令解释器调用awk 程序
利用UNIX 支持的命令解释器功能,我们可以将一段awk 程序写入文本文件,然后在它的第一行加上#!/bin/awk –f.
关于'BEGIN{} //{command1; command2} END{}':
awk [-F|-f|-v] 'BEGIN{} //{command1; command2} END{}' file
[-F|-f|-v] 大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value
' ' 引用代码块
BEGIN 初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符
// 匹配代码块,可以是字符串或正则表达式
{} 命令代码块,包含一条或多条命令
; 多条命令使用分号分隔
END 结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息
常用命令选项:
-F fs fs 指定输入分隔符,fs可以时字符串或正则表达式
-v var=value 赋值一个用户定义变量,将外部变量传递给awk
-f scriptfile 从脚本文件中读取awk命令
常见变量:
$n 当前记录的第n个字段,字段间由FS分隔
$0 完整的输入记录 # {print} 与 {print $0}都是打印当前行的全部内容
FS 字段分隔符(默认是任何空格)
NF 一条记录的字段的数目
NR 已经读出的记录数,就是行号,从1开始
FNR 各文件分别计数的行号
OFS 输出记录分隔符(输出换行符),输出时用指定的符号代替换行符
awk的 I/O指令:print, printf( ), getline, ...
awk的 流程控制指令:if(...){..} else{..}, while(...){...}, ...