最近用了下AWK,所以先记录点东西,以后完成后在添加。
awk 用法:awk ' pattern {action} '
变量名 含义
ARGV 命令行参数数组
ENVIRON 环境变量数组
FILENAME 当前输入文件名
FNR 当前文件中的记录号
FS 字段分隔符 默认应该为空格
IGNORECASE 忽略正则表达式和串的大小写
NF 当前记录中的列数
NR 至今读取的行数
OFMT 数的输出格式,缺省为"%.6g"
OFS 输出字段分隔符
ORS 输出记录分隔符 默认应该为换行
RS 输入记录分隔符
RSTART 由match() 匹配的第一个字符的索引
RLENGTH 由match() 匹配的串的长度
SUBSEP 下标分隔符,缺省为"?34"
内置字符串函数
gsub(r,s,t) 在字符串t中,用字符串s替换和正则表达式r匹配的所有字符串。返回替换的个数。 如果没有给出t,缺省为$0
index(s,t) 返回s 中字符串t 的位置,不出现时为0
length(s) 返回字符串s 的长度,当没有给出s时,返回$0的长度
match(s,r) 返回r 在s 中出现的位置,不出现时为0。设置RSTART和RLENGTH的值
split(s,a,r) 利用r 把s 分裂成数组a,返回元素的个数。如果没有给出r,则使用FS。数组分割和字段分割采用同样的方式
sprintf(fmt,expr_list) 根据格式串fmt,返回经过格式编排的expr_list
sub(r,s,t) 在字符串t中用s替换正则表达式t的首次匹配。如果成功则返回1,否则返回0。如果没有给出t,默认为$0
substr(s,p,n) 返回字符串s中从位置p开始最大长度为n的字串。如果没有给出n,返回从p开始剩余的字符串
tolower(s) 将串s 中的大写字母改为小写,返回新串
toupper(s) 将串s 中的小写字母改为大写,返回新串
注意:通过split函数建立数组:数组的下标为从1开始的数字。这里与c语言不同
内置算术函数
cos(x) 返回x的余弦值
sin(x) 返回x的正弦值
int(x) 返回x的整数部分
log(x) 返回x的自然对数
sqrt(x) 返回x的平方根
antan2(x) 返回y/x的反正切,值在 -π到 π之间
rand() 返回随机数r,0 <= r < 1
srand(x) 建立rand()的随机种子,如果没有指定种子,则按当天时间。返回旧的种子
最后写了个自己的AWK,作用是用来把表格按列输出,然后特定位置,插入特定的值。
parse=` echo $resulta | awk '{
split($0,atmp);m=1;for(i=1;i<=NF;i++){ar[m]=atmp[i];m++}}
END{ v=0;for(x in ar)v++; #计算有多少个数组元素
for(i=1;i<=10;i++){ #列数
for(m=i;m<=v;m+=10){ #元素个数
if(m>=1 && m<=10){ #第一列的元素后面插入30
printf ar[m]"%c",30;}
else if(m==len){ #最后一个不需要插入了
printf ar[m];}
else if(m>len-10){ #一列的最后一个元素和第二列第一个元素插入29
printf ar[m]"%c",29;}
else{ #其它地方插入31
printf ar[m]"%c",31;}
}
}
}'`