计算字符串的长度
方法1:使用expr length
代码如下:
aa="hello"
ll=`expr length $aa`
echo $ll # 5
expr
是在shell中进行表达式求值与字符串操作的命令,值得学习。
方法2:在${}
中使用#
代码:
aa="hello"
ll=${#aa}
echo $ll # 5
awk编写脚本并运行
今天第一次知道awk也可以编写脚本!!!awk真的是太强了!
这里简单记录一下怎么编写awk脚本并在命令行里运行。
前言
awk的一般使用情况是使用一行命令来对文件进行处理,将需要处理的命令写在单引号里面,比如下面这条命令:
awk '{print $1}' test.txt # 打印test.txt文件的第一列
当需要对数据进行复杂的处理时,比如要对文件的第1, 2, 3列都进行切分再求和,这个时候需要写很多的代码,写在一行里面会很难看,可读性非常差,而且由于对这3列的操作是一样的,如果写在一行里面就要写许多重复的代码,对于一个优秀的程序员来说,重复代码是见不得的。
因此可以将这些操作封装为一个函数,这样就可以非常方便的对1,2,3列进行处理,并且awk是支持自定义函数的!
具体使用方式
awk的脚本文件后缀是.awk,可以写在里面的代码就是单行命令中单引号里面的代码,有了一个awk脚本后,在命令行里就使用awk -f test.awk命令来运行这个脚本,下面举个例子。
比如要输出test.txt文件的第1,2,3列,可以用的单行命令是awk '{print $1 $2 $3}' test.txt
,
写成脚本形式的话,就将单引号里面的内容写在test.awk文件中,该文件的内容如下:
{print $1, $2, $3}
然后在命令行里调用awk -f test.awk test.txt
,就可以打印出test.txt文件的第1,2,3列。
awk里的注释
注释符号同shell一样,用井号表示注释(#)。
在awk脚本中自定义函数
自定义函数的格式如下:
function function_name(arg1, arg2, ...)
{
function body
}
比如计算两个数的最小值:
# 计算最小值
function min(a, b){
if(a > b){
return b;
} else {
return a;
}
}
BEGIN {print "min is", min(10,20)}
在命令行中运行awk -f test.awk
,会打印
min is 10