- 浏览: 67970 次
- 性别:
- 来自: 西安
文章分类
最新评论
前言
一、AWK简介
AWK名字来源于三位创造者Aho、Weinberger和Kernighan统称。
AWK擅长处理文本数据。
二、AWK的调用方式
awk [-Ffs] [-v var=value] [program | -f progfile ...] [file ...]
1、命令行方式
例如:
awk '{print $1}' file
ps -ef|grep program|awk '{print $2}'
2、文件方式
例如:
awk -f progfile file
3、文件解释器方式
AWK脚本文件开头需要注明调用方式,典型写法为:
#!/bin/awk -f
注意-f后面有空格。
脚本文件需要有执行权限,如果没有需要使用chmod +x progfile赋权。
例如:
progfile file
三、AWK参数
-F 指定域分隔符,例如:-F "|",即以|作为域分隔符,默认分隔符为一个或多个空格或TAB,即"[[:space:]][[:space:]]*"。
-v 定义变量,从shell给awk传递变量,如-vDATE=$DATE,即将shell中$DATE变量值传递给awk变量DATE。
-f 指定脚本文件,例如-f progfile。
四、AWK内置变量
FS 域分隔符
NF 域个数
NR 行数
FNR 同上
FILENAME 处理的文件名,当输入为管道时,FILENAME为空。
RS 行分隔符
OFS 输出域分隔符
ORS 输出行分隔符
OFMT 数字输出格式
CONVFMT 数字内部转换格式
SUBSEP 多维数组索引分隔符
ARGC 输入参数个数
ARGV 输入参数数组
ENVIRON 环境变量数组
RSTART match()函数正则匹配到字符串开始位置
RLENGTH match()函数正则匹配到字符串的长度
五、AWK内置函数
blength[([s])] 计算字符串长度(byte为单位)
length[([s])] 计算字符串长度(character为单位)
rand() 生成随机数
srand([expr]) 设置rand() seed
int(x) 字符串转换为整型
substr(s, m [, n]) 取子字符串
index(s, t) 在字符串s中定位t字符串首次出现的位置
match(s, ere) 在字符串s中匹配正则ere,match修改RSTART、RLENGTH变量。
split(s, a[, fs]) 将字符串分割到数组中
sub(ere, repl [, in]) 字符串替换
gsub 同上
sprintf(fmt, expr, ...) 拼字符串
system(cmd) 在shell中执行cmd。
toupper(s) 字符串转换为大写
tolower(s) 字符串转换为小写
六、AWK流程控制
if(expression) statement [ else statement ]
while(expression) statement
for(expression;expression;expression) statement
for(var in array) statement
do statement while(expression)
break
continue
{[statement ...]}
expression # commonly var = expression
print [expression-list] [ > expression]
printf format [, expression-list] [ > expression]
return [expression]
next # skip remaining patterns on this input line.
delete array [expression] # delete an array element.
exit [expression] # exit immediately; status is expression.
七、AWK简单应用范例
AWK脚本分为三部分BEGIN段,处理段,END段。其中BEGIN段在第一行读取之前执行,END段在最后一行处理后执行。
1、内容过滤,同"grep tag file"。
#前两个语句为正则匹配
awk '/tag/ {print}' file
awk '{if($0 ~/tag/) print}' file
awk '{if(index($0, "tag") > 0) print}' file
2、取特定列,同"cut –f1 –f3 –f5 file"。
#输出文件第1、3、5列
awk '{print $1, $3, $5}' file
3、对文件内容进行剔重,类似"sort -u file",但未排序。
#如果当前行未存在于rec HASH表中,则记录此行数据,并输出
awk '{if(!($0 in rec)) {rec[$0]=1; print $0;}}' file
AWK中数组有两种用法普通数组和HASH数组,此处为HASH数组。
4、仅输出数据
#输出100行数据
awk ‘BEGIN {for(i = 0; i < 100; i++) printf("this is %d\n", i);}’
可见,如果脚本中只有BEGIN段,可以没有输入。
5、统计数据
#对第一列和第二列数据进行汇总,最终输出
awk ‘{a+=$1; b+=$2}END{printf("a=%d\n,b=%d\n", a, b);}’ file
八、AWK高级应用范例
1、 分组功能,类似Group by功能
#使用第一列作为分组列,第二列为聚合列,即select col1, sum(col2) from file group by col1
awk ‘{tot[$1] += $2}END{for(i in tot) printf("%s %d\n", i, tot[i]);}’ file
#比上个例子增加一个类似having的用法
awk ‘{tot[$1] += $2}END{for(i in tot) if(tot[i] > 10) printf("%s %d\n", i, tot[i]);}’ file
#使用第一列作为分组列,第二列、第三列为聚合列
awk ‘{tot1[$1] += $2; tot2[$1] += $3;}END{for(i in tot1) printf("%s %d %d\n", i, tot1[i], tot2[i]);}’ file
#多维数组例子,可将多个字段作为分组列,AWK使用一维数组模拟多维数组,使用\034作为分隔符
awk ‘{tot1[$1, $2] += $3; tot2[$1, $2] += $4;}END{for(i in tot1) printf("%s %d %d\n", i, tot1[i], tot2[i]);}’ file
2、 文件操作
#将两个文件根据filename1的第一列和filename2的第二列进行关联
BEGIN {
#读取filename1文件内容
while((getline < "filename1") != NULL)
{
rel[$1] = 1;
rec1[$1] = $2;
}
while((getline < "filename2") != NULL)
{
rel[$2] = 1;
rec2[$2] = $3;
}
for(i in rel)
{
printf("%s %s %s\n", i, rec1[i], rec2[i]);
}
}
#将文件按照字段进行拆分
{
print $0 >> "split/" substr($1,1,7);
}
3、 从SHELL向AWK传递变量
awk -vAWK_DATE=$DATE 'BEGIN {print AWK_DATE}'
4、 在AWK内部读取shell命令输出
#读取ls命令输出,在AWK中打印输出
BEGIN {
while("ls"|getline)
{
print $0;
}
}
#读取date输出
BEGIN {
"date" | getline;
print $0;
"date +%Y" | getline v_year;
print v_year;
}
5、 将AWK输出通过管道传递给SHELL命令
#将打印信息输出给sort进行排序
BEGIN {
for(i = 0; i < 100; i++)
{
printf("%03d\n", 100 - i) | "sort";
}
}
6、 正则表达式简单例子
#演示正则表达式的使用方法
BEGIN {
str1 = "abc.123@gmail.com";
str2 = "123123abcd@gmail.com";
str3 = "&^%76123@gmail.com";
str4 = "zxcvb@sohu.com.cn.1231231";
match(str1, "[a-zA-Z][a-zA-Z0-9.]*@[a-zA-Z0-9][a-zA-Z0-9.]*.[a-zA-Z]*[a-zA-Z]");
if(RSTART > 0)
printf("%s\n", substr(str1, RSTART, RLENGTH));
else
printf("[%s] not match\n", str1);
match(str2, "[a-zA-Z][a-zA-Z0-9.]*@[a-zA-Z0-9][a-zA-Z0-9.]*.[a-zA-Z]*[a-zA-Z]");
if(RSTART > 0)
printf("%s\n", substr(str2, RSTART, RLENGTH));
else
printf("[%s] not match\n", str2);
match(str3, "[a-zA-Z][a-zA-Z0-9.]*@[a-zA-Z0-9][a-zA-Z0-9.]*.[a-zA-Z]*[a-zA-Z]");
if(RSTART > 0)
printf("%s\n", substr(str3, RSTART, RLENGTH));
else
printf("[%s] not match\n", str3);
match(str4, "[a-zA-Z][a-zA-Z0-9.]*@[a-zA-Z0-9][a-zA-Z0-9.]*.[a-zA-Z]*[a-zA-Z]");
if(RSTART > 0)
printf("%s\n", substr(str4, RSTART, RLENGTH));
else
printf("[%s] not match\n", str4);
}
7、自定义函数
function my_plus(a, b)
{
return a + b;
}
BEGIN {
printf("%d\n", my_plus(123, 321));
}
九、一些应用范例
1、验证话单正确性的一个脚本
/^vc/ {
#取话单中各个变量
call_type = substr($0,3,2);
call_duration = int(substr($0,95,6));
roam_type = substr($0,210,1);
fee_type = substr($0,211,1);
dial_type = substr($0,212,3);
chat_type = substr($0,215,3);
cfee = int(substr($0,218,9));
lfee = int(substr($0,236,9));
#如果为国际漫游,不分析,跳过
if(roam_type > 4)
{
next;
}
if(call_type == "01")
{
if(substr(dial_type,1,1) != "0")
{
if(lfee > 0)
{
printf("%s:LFEE_01\n", $0);
}
next;
}
if(roam_type != "0")
{
if(fee_type == "0" || fee_type == "2" || fee_type == "3")
{
if(lfee > 0)
{
printf("%s:LFEE_ERR02\n", $0)
}
}
else
{
if(cfee > 0)
{
printf("%s:CFEE_ERR01\n", $0);
}
}
}
else
{
if(fee_type != "0")
{
if(cfee > 0)
{
printf("%s:CFEE_ERR02\n", $0);
}
}
}
}
if(call_type == "02")
{
if(lfee > 0)
{
printf("%s:LFEE_ERR03\n", $0);
}
}
}
2、一个模拟求取批价标批费率计划的例子
function my_match(str, pat)
{
#for debug
#printf("str==>|%s|,pat==>|%s|\n", str, pat);
if(pat == "*")
return 1;
n = split(pat, arr, ",");
for(z = 1; z <= n; z++)
{
gsub("\?", "[a-zA-Z0-9]", arr[z]);
#for debug
#printf("str==|%s|,arr==>|%s|\n", str, arr[z]);
match(str, arr[z]);
if(RSTART > 0)
{
return 1;
}
}
return 0;
}
BEGIN {
dial_cnt = 0;
while((getline < "dial.lst") != NULL)
{
dial[dial_cnt] = $1;
dial_cnt++;
}
chat_cnt = 0;
while((getline < "chat.lst") != NULL)
{
chat[chat_cnt] = $1;
chat_cnt++;
}
cfg_cnt = 0;
while((getline < "plan.lst") != NULL)
{
cfg_dial[cfg_cnt] = $1;
cfg_chat[cfg_cnt] = $2;
cfg_item[cfg_cnt] = $3;
cfg_plan[cfg_cnt] = $4;
cfg_cnt++;
}
for(d = 0; d < dial_cnt; d++)
{
for(c = 0; c < chat_cnt; c++)
{
printf("%s %s|", dial[d], chat[c]);
out_cnt = 0;
for(i = 0; i < cfg_cnt; i++)
{
#for debug
#printf("\n<%d,%d,%d>test match==>|<%s, %s>; <%s, %s>|\n", d, c, i, dial[d], cfg_dial[i], chat[c], cfg_chat[i]);
if(my_match(dial[d], cfg_dial[i]) == 1 && my_match(chat[c], cfg_chat[i]) == 1)
{
if(out_cnt == 0)
{
printf("%s %s %s %s\n", cfg_item[i], cfg_plan[i], cfg_dial[i], cfg_chat[i]);
}
else
{
printf("%s %s|%s %s %s %s\n", dial[d], chat[c], cfg_item[i], cfg_plan[i], cfg_dial[i], cfg_chat[i]);
}
out_cnt++;
}
}
if(out_cnt == 0)
{
printf("NULL\n");
}
}
}
}
一、AWK简介
AWK名字来源于三位创造者Aho、Weinberger和Kernighan统称。
AWK擅长处理文本数据。
二、AWK的调用方式
awk [-Ffs] [-v var=value] [program | -f progfile ...] [file ...]
1、命令行方式
例如:
awk '{print $1}' file
ps -ef|grep program|awk '{print $2}'
2、文件方式
例如:
awk -f progfile file
3、文件解释器方式
AWK脚本文件开头需要注明调用方式,典型写法为:
#!/bin/awk -f
注意-f后面有空格。
脚本文件需要有执行权限,如果没有需要使用chmod +x progfile赋权。
例如:
progfile file
三、AWK参数
-F 指定域分隔符,例如:-F "|",即以|作为域分隔符,默认分隔符为一个或多个空格或TAB,即"[[:space:]][[:space:]]*"。
-v 定义变量,从shell给awk传递变量,如-vDATE=$DATE,即将shell中$DATE变量值传递给awk变量DATE。
-f 指定脚本文件,例如-f progfile。
四、AWK内置变量
FS 域分隔符
NF 域个数
NR 行数
FNR 同上
FILENAME 处理的文件名,当输入为管道时,FILENAME为空。
RS 行分隔符
OFS 输出域分隔符
ORS 输出行分隔符
OFMT 数字输出格式
CONVFMT 数字内部转换格式
SUBSEP 多维数组索引分隔符
ARGC 输入参数个数
ARGV 输入参数数组
ENVIRON 环境变量数组
RSTART match()函数正则匹配到字符串开始位置
RLENGTH match()函数正则匹配到字符串的长度
五、AWK内置函数
blength[([s])] 计算字符串长度(byte为单位)
length[([s])] 计算字符串长度(character为单位)
rand() 生成随机数
srand([expr]) 设置rand() seed
int(x) 字符串转换为整型
substr(s, m [, n]) 取子字符串
index(s, t) 在字符串s中定位t字符串首次出现的位置
match(s, ere) 在字符串s中匹配正则ere,match修改RSTART、RLENGTH变量。
split(s, a[, fs]) 将字符串分割到数组中
sub(ere, repl [, in]) 字符串替换
gsub 同上
sprintf(fmt, expr, ...) 拼字符串
system(cmd) 在shell中执行cmd。
toupper(s) 字符串转换为大写
tolower(s) 字符串转换为小写
六、AWK流程控制
if(expression) statement [ else statement ]
while(expression) statement
for(expression;expression;expression) statement
for(var in array) statement
do statement while(expression)
break
continue
{[statement ...]}
expression # commonly var = expression
print [expression-list] [ > expression]
printf format [, expression-list] [ > expression]
return [expression]
next # skip remaining patterns on this input line.
delete array [expression] # delete an array element.
exit [expression] # exit immediately; status is expression.
七、AWK简单应用范例
AWK脚本分为三部分BEGIN段,处理段,END段。其中BEGIN段在第一行读取之前执行,END段在最后一行处理后执行。
1、内容过滤,同"grep tag file"。
#前两个语句为正则匹配
awk '/tag/ {print}' file
awk '{if($0 ~/tag/) print}' file
awk '{if(index($0, "tag") > 0) print}' file
2、取特定列,同"cut –f1 –f3 –f5 file"。
#输出文件第1、3、5列
awk '{print $1, $3, $5}' file
3、对文件内容进行剔重,类似"sort -u file",但未排序。
#如果当前行未存在于rec HASH表中,则记录此行数据,并输出
awk '{if(!($0 in rec)) {rec[$0]=1; print $0;}}' file
AWK中数组有两种用法普通数组和HASH数组,此处为HASH数组。
4、仅输出数据
#输出100行数据
awk ‘BEGIN {for(i = 0; i < 100; i++) printf("this is %d\n", i);}’
可见,如果脚本中只有BEGIN段,可以没有输入。
5、统计数据
#对第一列和第二列数据进行汇总,最终输出
awk ‘{a+=$1; b+=$2}END{printf("a=%d\n,b=%d\n", a, b);}’ file
八、AWK高级应用范例
1、 分组功能,类似Group by功能
#使用第一列作为分组列,第二列为聚合列,即select col1, sum(col2) from file group by col1
awk ‘{tot[$1] += $2}END{for(i in tot) printf("%s %d\n", i, tot[i]);}’ file
#比上个例子增加一个类似having的用法
awk ‘{tot[$1] += $2}END{for(i in tot) if(tot[i] > 10) printf("%s %d\n", i, tot[i]);}’ file
#使用第一列作为分组列,第二列、第三列为聚合列
awk ‘{tot1[$1] += $2; tot2[$1] += $3;}END{for(i in tot1) printf("%s %d %d\n", i, tot1[i], tot2[i]);}’ file
#多维数组例子,可将多个字段作为分组列,AWK使用一维数组模拟多维数组,使用\034作为分隔符
awk ‘{tot1[$1, $2] += $3; tot2[$1, $2] += $4;}END{for(i in tot1) printf("%s %d %d\n", i, tot1[i], tot2[i]);}’ file
2、 文件操作
#将两个文件根据filename1的第一列和filename2的第二列进行关联
BEGIN {
#读取filename1文件内容
while((getline < "filename1") != NULL)
{
rel[$1] = 1;
rec1[$1] = $2;
}
while((getline < "filename2") != NULL)
{
rel[$2] = 1;
rec2[$2] = $3;
}
for(i in rel)
{
printf("%s %s %s\n", i, rec1[i], rec2[i]);
}
}
#将文件按照字段进行拆分
{
print $0 >> "split/" substr($1,1,7);
}
3、 从SHELL向AWK传递变量
awk -vAWK_DATE=$DATE 'BEGIN {print AWK_DATE}'
4、 在AWK内部读取shell命令输出
#读取ls命令输出,在AWK中打印输出
BEGIN {
while("ls"|getline)
{
print $0;
}
}
#读取date输出
BEGIN {
"date" | getline;
print $0;
"date +%Y" | getline v_year;
print v_year;
}
5、 将AWK输出通过管道传递给SHELL命令
#将打印信息输出给sort进行排序
BEGIN {
for(i = 0; i < 100; i++)
{
printf("%03d\n", 100 - i) | "sort";
}
}
6、 正则表达式简单例子
#演示正则表达式的使用方法
BEGIN {
str1 = "abc.123@gmail.com";
str2 = "123123abcd@gmail.com";
str3 = "&^%76123@gmail.com";
str4 = "zxcvb@sohu.com.cn.1231231";
match(str1, "[a-zA-Z][a-zA-Z0-9.]*@[a-zA-Z0-9][a-zA-Z0-9.]*.[a-zA-Z]*[a-zA-Z]");
if(RSTART > 0)
printf("%s\n", substr(str1, RSTART, RLENGTH));
else
printf("[%s] not match\n", str1);
match(str2, "[a-zA-Z][a-zA-Z0-9.]*@[a-zA-Z0-9][a-zA-Z0-9.]*.[a-zA-Z]*[a-zA-Z]");
if(RSTART > 0)
printf("%s\n", substr(str2, RSTART, RLENGTH));
else
printf("[%s] not match\n", str2);
match(str3, "[a-zA-Z][a-zA-Z0-9.]*@[a-zA-Z0-9][a-zA-Z0-9.]*.[a-zA-Z]*[a-zA-Z]");
if(RSTART > 0)
printf("%s\n", substr(str3, RSTART, RLENGTH));
else
printf("[%s] not match\n", str3);
match(str4, "[a-zA-Z][a-zA-Z0-9.]*@[a-zA-Z0-9][a-zA-Z0-9.]*.[a-zA-Z]*[a-zA-Z]");
if(RSTART > 0)
printf("%s\n", substr(str4, RSTART, RLENGTH));
else
printf("[%s] not match\n", str4);
}
7、自定义函数
function my_plus(a, b)
{
return a + b;
}
BEGIN {
printf("%d\n", my_plus(123, 321));
}
九、一些应用范例
1、验证话单正确性的一个脚本
/^vc/ {
#取话单中各个变量
call_type = substr($0,3,2);
call_duration = int(substr($0,95,6));
roam_type = substr($0,210,1);
fee_type = substr($0,211,1);
dial_type = substr($0,212,3);
chat_type = substr($0,215,3);
cfee = int(substr($0,218,9));
lfee = int(substr($0,236,9));
#如果为国际漫游,不分析,跳过
if(roam_type > 4)
{
next;
}
if(call_type == "01")
{
if(substr(dial_type,1,1) != "0")
{
if(lfee > 0)
{
printf("%s:LFEE_01\n", $0);
}
next;
}
if(roam_type != "0")
{
if(fee_type == "0" || fee_type == "2" || fee_type == "3")
{
if(lfee > 0)
{
printf("%s:LFEE_ERR02\n", $0)
}
}
else
{
if(cfee > 0)
{
printf("%s:CFEE_ERR01\n", $0);
}
}
}
else
{
if(fee_type != "0")
{
if(cfee > 0)
{
printf("%s:CFEE_ERR02\n", $0);
}
}
}
}
if(call_type == "02")
{
if(lfee > 0)
{
printf("%s:LFEE_ERR03\n", $0);
}
}
}
2、一个模拟求取批价标批费率计划的例子
function my_match(str, pat)
{
#for debug
#printf("str==>|%s|,pat==>|%s|\n", str, pat);
if(pat == "*")
return 1;
n = split(pat, arr, ",");
for(z = 1; z <= n; z++)
{
gsub("\?", "[a-zA-Z0-9]", arr[z]);
#for debug
#printf("str==|%s|,arr==>|%s|\n", str, arr[z]);
match(str, arr[z]);
if(RSTART > 0)
{
return 1;
}
}
return 0;
}
BEGIN {
dial_cnt = 0;
while((getline < "dial.lst") != NULL)
{
dial[dial_cnt] = $1;
dial_cnt++;
}
chat_cnt = 0;
while((getline < "chat.lst") != NULL)
{
chat[chat_cnt] = $1;
chat_cnt++;
}
cfg_cnt = 0;
while((getline < "plan.lst") != NULL)
{
cfg_dial[cfg_cnt] = $1;
cfg_chat[cfg_cnt] = $2;
cfg_item[cfg_cnt] = $3;
cfg_plan[cfg_cnt] = $4;
cfg_cnt++;
}
for(d = 0; d < dial_cnt; d++)
{
for(c = 0; c < chat_cnt; c++)
{
printf("%s %s|", dial[d], chat[c]);
out_cnt = 0;
for(i = 0; i < cfg_cnt; i++)
{
#for debug
#printf("\n<%d,%d,%d>test match==>|<%s, %s>; <%s, %s>|\n", d, c, i, dial[d], cfg_dial[i], chat[c], cfg_chat[i]);
if(my_match(dial[d], cfg_dial[i]) == 1 && my_match(chat[c], cfg_chat[i]) == 1)
{
if(out_cnt == 0)
{
printf("%s %s %s %s\n", cfg_item[i], cfg_plan[i], cfg_dial[i], cfg_chat[i]);
}
else
{
printf("%s %s|%s %s %s %s\n", dial[d], chat[c], cfg_item[i], cfg_plan[i], cfg_dial[i], cfg_chat[i]);
}
out_cnt++;
}
}
if(out_cnt == 0)
{
printf("NULL\n");
}
}
}
}
发表评论
-
oracle 数据导入 数据和备注(comment)乱码问题解决办法
2019-10-22 20:35 13431 源数据库: 字符集:SIMPLIFIEDCHINE ... -
Oracle数据泵导出/导入数据
2019-10-22 11:34 436由于在oracle11g之后的某些版本中,采用exp方式导出数 ... -
oracle 修改字段类型sql
2018-09-20 09:55 9321、创建备份表; create table bbs ... -
Oracle 表锁定,解锁
2018-05-08 14:34 541查询哪些表被锁定 select b.owner,b.ob ... -
Mongodb 数据库导出及导入!
2017-06-13 16:00 738数据据导出 mongodump -h 192.168.5.10 ... -
Mongodb 备份shell
2016-05-05 13:34 604#!/bin/bash ################## ... -
Oracle archivelog 备份管理
2015-09-08 11:51 619一、Oracle archivelog 模式开启, 依次执行 ... -
Oracle StatSpack
2015-09-07 12:12 661一、Statspack概述 Oracle Statspack工 ... -
Oracle数据库 sqlplus命令下 使用backspace键乱码问题!
2015-08-20 15:48 907在Oracle用户环境变量中加入以下代码: stty er ... -
打开64位 Ubuntu 的32位支持功能
2015-08-14 15:33 958打开终端然后输入: dpkg --print-archite ... -
Ubuntu14.4 更新数据源 ,无法解析域名!
2015-05-06 17:27 2841Ubuntu 14.4更新数据源,无法解析问题,解决办法! ... -
SecureCRT图形模式开启
2014-05-07 14:13 859大家在使用客户端连 ... -
OracleRAC 环境下修改归档模式
2014-02-08 10:18 710RAC环境下的归档模式切换与单实例稍有不同,主要是共享存储所 ... -
oracle日常维护常用的55条语句
2013-07-08 12:01 7071.如何查看数据库的状态 unix下 ps -ef ... -
Oracle ORA0-00376 问题处理
2013-06-21 15:32 919ORA0-00376: "file '/data1/ ... -
操作系统常用命令-转载
2013-03-23 19:41 11401。密码文件放在哪? AIX中: /etc/passwd ... -
Oracle 10G 归档日志删除
2012-12-26 09:56 727错误代码:ORA-00257 :archiver error. ... -
weblogic 数据源无法链接,导致web页面不能正常访问。
2012-12-11 13:51 868weblogic 10.3.2 配置两个数据源,如果其中一个 ... -
错误代码:xhost local:oracle non-network local connections being added to access
2012-10-23 20:14 2734错误代码:xhost local:oracle non-net ... -
oracle10g 建库出现 ORA-00600:internal error code,错误解决办法
2012-10-15 17:11 758在最底部加入本机ip及主机名和主机别名 [oracle@NN- ...
相关推荐
MOXA AWK-3121 配置方法及要点说明 MOXA AWK-3121 是一种工业级无线设备,具有 web 功能配置、IP 网络参数设置、工作模式选择、功率增强等特点。本文将详细介绍 MOXA AWK-3121 的配置方法及要点说明。 一、Web ...
- **语法**:`BEGIN { awk-commands }` - **示例**:`BEGIN { print "开始处理..." }` - **主体块**:这部分是`awk`程序的主要组成部分,包含具体的处理逻辑。 - **语法**:`pattern { awk-commands }` - **...
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首 字符。
Moxa AWK-3131A 三合一工业级无线AP/Bridge/Client 支 持IEEE 802.11n 技术,数据传输率高达300Mbps,满足了 不断增长的快速数据传输和信号覆盖范围更广泛的要求。 AWK-3131A 符合各种工业标准,包括工作温度、输入...
GNU Awk,又称GAWK,是一种强大的文本处理工具,它允许用户以一种简单而有效的方式在文本文件中执行复杂的模式匹配、数据提取、数据转换和报告生成。《GAWK: Effective AWK Programming - GNU Awk编程经典》是一本...
### AWK-4121系列室外无线AP/网桥/客户端关键技术知识点 #### 一、产品概述 AWK-4121是一款专为工业级应用设计的室外无线接入点/AP、网桥及客户端三合一设备。它适用于不易布线、布线成本较高或者需要在移动TCP/IP...
**awk命令详解** awk是一种强大的文本分析工具,广泛应用于Linux和Unix系统中,用于处理结构化数据,如CSV、TSV格式的文件。它通过模式匹配和动作来处理输入流中的每一行,允许用户定制复杂的文本处理逻辑。下面将...
### AWK编程学习知识点 #### 一、AWK概述与基本使用 - **AWK简介**:AWK是一种脚本语言,专为文本处理而设计,最初由贝尔实验室的Alfred Aho、Peter Weinberger和Brian Kernighan开发。AWK在所有Unix和类Unix系统...
AWK 是一个强大的文本分析工具,主要用于处理结构化的文本数据。在GNU/Linux环境中,它被广泛用于数据分析、日志分析和报告生成等任务。AWK的设计理念是让用户能够通过模式匹配和动作来处理文本,而无需编写完整的...
### Awk One-Liners Explained (Chinese Edition) #### 第一部分:行距、编号与运算 在探讨Awk的使用技巧之前,我们先简单了解一下Awk的基本概念。Awk是一种强大的文本处理工具,常用于Linux和Unix环境中。它可以...
首先,配置AWK-3121-EU的IP网络参数是实现设备接入网络的基础。通过Web界面可以设置IP地址、子网掩码以及默认网关,为设备提供唯一的网络身份标识。在网络配置中,详细步骤通常包括IP地址的静态分配或通过DHCP自动...
《全面解析NS2仿真与AWK脚本:深入理解all-awk.rar》 在计算机科学领域,网络模拟和分析是至关重要的环节,特别是在设计和优化网络协议时。NS2(Network Simulator 2)是一个广泛使用的开源网络模拟工具,它允许...
"Sed-and-Awk-101-Hacks"可能包含如何使用基本的sed命令,如替换、删除、插入行,以及使用地址范围进行特定操作。此外,还可能涉及正则表达式在sed中的应用,如查找和替换模式,以及使用sed进行批量文本编辑。 3. ...
### AWK用法详解 #### 引言 AWK,作为一种功能强大的文本处理语言,以其独特的设计和灵活性在数据处理领域占据了一席之地。本文旨在深入解析AWK的核心概念、特性及其应用场景,帮助读者理解如何利用AWK高效地处理...
awk-思维导图
在Linux系统中,awk是一种强大的文本分析工具,尤其在处理数据和日志文件时非常有用。awk其实有多个版本,包括awk、nawk和gawk,而在CentOS系统中默认使用的是gawk。awk的工作原理是对文本文件的每一行进行处理,...
The book begins with an overview and a tutorial that demonstrate a progression in functionality from grep to sed to awk. sed and awk share a similar command-line syntax, accepting user instructions in...
### awk使用手册详解 #### 一、awk简介 在UNIX世界里,存在许多强大的文本处理工具,其中awk作为一款出色的模式扫描与处理语言,却往往被人们所忽视。它的名字来源于三位创造者的名字首字母——Aho、Weinberg以及...
这个名为"AWK-file.rar_awk_awk tcl_delay awk_jitter awk _jitter ns-2"的压缩包文件显然是针对网络性能分析的,特别是使用AWK进行分析。下面将详细介绍涉及的知识点。 1. **AWK**: AWK是一种编程语言,由Aho、...
Sed和Awk是UNIX和Linux系统中极为重要的流编辑器和文本处理工具,它们能够通过简单的命令或脚本高效处理文本文件,实现复杂的文本转换和报告生成。接下来,我们将根据提供的文件内容详细地说明Sed和Awk的关键知识点...