Linux三剑客awk命令篇二:命令操作符
创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、成都做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的宏伟网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
关于awk的原理等基本知识请参考上篇:
Linux三剑客awk命令篇一:原理及基本命令
补充
1、语法格式:
(1) Awk完整语法
awk 'BEGIN{commands} pattern{commands}END{commands} ' file
BEGIN{commands}:处理数据前执行的命令。
END{commands}:处理完数据后执行的命令。
这两个命令可以省略。见(2)
(2) Awk基本语法
awk -F '分割符' '/模式/{动作} ' file
这里的 '/模式/{动作} ' 类似于sed的命令格式。
模式:
(1) 正则表达式(注意格式: /正则表达式/ )
(2) 条件表达式(例如: 等等)
总结:
这里的模式通俗来讲是 用来找谁, 而动作表示是 干啥。
2、 awk的命令操作符
(1) 正则表达式与bash一致
(2) + - * / % ++ --
(3) || !
(4) = = != == ~ !~
~:表示匹配后面的模式,用于字段,见 案例1 。
其余的都比较常见就不举例了。
3、案例
案例1:
~使用案例
awk -F : '$3 ~ /\...\/{print $1,$3}' /etc/passwd
解释:
模式:\...\
\ \表示定界符,只匹配3个字符。
$3 ~:表示$3这个字段必须符合后面模式(\...\)的要求。
见如下输出结果,$3都是3个字符。
案例2:
% || ==使用案例
seq 100 | awk '$1 % 7 == 0 || $1 ~ /^99/{print $1}'
输出结果的要求:
整除7或者以99开头
案例3:
++使用
awk 'BEGIN{num=0}{num++}END{print num}' /etc/passwd
简单解释:
BEGIN{num=0}:定义一个变量num
{num++}:这里没有模式,只有动作。
即每匹配到文件/etc/passwd的一行就执行num++
END{print num}:文件遍历结束,打印num的值,即文件的行数。
这里我们使用wc -l验证也是没问题的。
cat /etc/passwd | wc -l
上面3个案例简单的使用了awk的命令操作符。
虽然只是用到了几个简单的,但是其他同理,大家可以执行操作。
下一篇:
Linux三剑客awk命令篇二之内部变量
欢迎大家给予宝贵的意见或者建议。
欢迎大家补充或者共享一些其他的方法。
感谢支持。
文件比较运算符-e filename
如果 filename存在,则为真 [ -e /var/log/syslog ]-d filename
如果 filename为目录,则为真 [ -d /tmp/mydir ]-f filename
如果 filename为常规文件,则为真 [ -f /usr/bin/grep ]-L filename
如果 filename为符号链接,则为真 [ -L /usr/bin/grep ]-r filename
如果 filename可读,则为真 [ -r /var/log/syslog ]-w filename
如果 filename可写,则为真 [ -w /var/mytmp.txt ]-x filename
如果 filename可执行,则为真 [ -L /usr/bin/grep ]filename1-nt filename2
如果 filename1比 filename2新,则为真 [ /tmp/install/etc/services -nt /etc/services ]filename1-ot filename2
如果 filename1比 filename2旧,则为真 [ /boot/bzImage -ot arch/i386
/boot/bzImage ]字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string 如果 string长度为零,则为真 [ -z "$myvar" ]-n string 如果 string长度非零,则为真 [ -n "$myvar" ]
string1= string2 如果 string1与 string2相同,则为真 [ "$myvar" = "one two three"]
string1!= string2 如果 string1与 string2不同,则为真 [ "$myvar" != "one two three" ]
算术比较运算符num1-eq num2 等于 [ 3 -eq $mynum ]
num1-ne num2 不等于 [ 3 -ne $mynum ]num1-lt num2 小于 [ 3 -lt $mynum ]
num1-le num2 小于或等于 [ 3 -le $mynum ]num1-gt num2 大于 [ 3 -gt $mynum ]
num1-ge num2 大于或等于 [ 3 -ge $mynum ]
拓展资料:
Linux操作系统
是基于UNIX操作系统发展而来的一种克隆系统,它诞生于1991 年的 [Linux桌面] 10 月5 日(这是第一次正式向外公布的时间)。以后借助于Internet网络,并通过全世界各地计算机爱好者的共同努力,已成为今天世界上使用最多的一种UNIX 类操作系统,并且使用人数还在迅猛增长。
用;号隔开每个命令, 每个命令按照从左到右的顺序,顺序执行, 彼此之间不关心是否失败, 所有命令都会执行。
上一条命令的输出,作为下一条命令参数
方式: command1 | command2
Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为 第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推
利用一个管道
rpm -qa|grep licq
这条命令使用一个管道符“|”建立了一个管道。管道将rpm -qa命令的输出(包括系统中所有安装的RPM包)作为grep命令的输入,从而列出带有licq字符的RPM包来。
利用多个管道
cat /etc/passwd | grep /bin/bash | wc -l
这条命令使用了两个管道,利用第一个管道将cat命令(显示passwd文件的内容)的输出送给grep命令,grep命令找出含有“/bin /bash”的所有行;第二个管道将grep的输出送给wc命令,wc命令统计出输入中的行数。这个命令的功能在于找出系统中有多少个用户使用bash
放在启动参数后面表示设置此进程为后台进程
方式: command1
默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个''实现这个目的。
shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 ? 中,可以通过 $? 获取当前变量的值,当 $?==0 时表示执行成功,当时 $?==1 (我认为是非0的数,返回值在0-255间),表示执行失败。
有时候,下一条命令依赖前一条命令是否执行成功。如:在成功地执行一条命令之后再执行另一条命令,或者在一条命令执行失败后再执行另一条命令等。shell 提供了 和 || 来实现命令执行控制的功能,shell 将根据 或 || 前面命令的返回值来控制其后面命令的执行。
语法格式如下:
command1 command2 [ command3 ...]
命令之间使用 连接,实现逻辑与的功能。
只有在 左边的命令返回真(命令返回值 $? == 0 ), 右边的命令才会被执行。
只要有一个命令返回假(命令返回值 $? == 1 ),后面的命令就不会被执行。
逻辑或的功能
语法格式如下:
command1 || command2 [|| command3 ...]
命令之间使用 || 连接,实现逻辑或的功能。
只有在 || 左边的命令返回假(命令返回值 $? == 1 ),
|| 右边的命令才会被执行。这和 c 语言中的逻辑或语法功能相同,即实现短路逻辑或操作。 只要有一个命令返回真(命令返回值 $? == 0 ),后面的命令就不会被执行。 –直到返回真的地方停止执行。
举例, ping 命令判断存活主机
注意 要连起来写
参考
linux命令行计算器
详细文档请 man bc
在windows下,大家都知道直接运行calc,(c:\windows\system32\calc.exe),可以打开计算器。
注:
calculate vt.vi.
计算;calculator n. 计算器。calc就是这个计算的简写。
Ca在化学中是代表钙元素,calcium
钙(20号元素,符号Ca)。两者有什么联系呢?
calculate 来自calculus,原义是做算术运算的小石子,是calx(石灰石)的小称。
那么在linux系统下,有无与windows下calc.exe类似的计算器呢?
下面总结linux下的三个命令,来介绍一下linux下的计算方法:
1)bc
bc在默认的情况下是个交互式的指 令。在bc工作环境下,可以使用以下计算符号:
+ 加法
- 减法
* 乘法
/ 除法
^ 指数
% 余数
如:
#
bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation,
Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
3+6
=加法
9
4+2*3 =加法、乘法
10
(4+2)*3 =加法、乘法(优先)
18
4*6/8
=乘法、除法
3
10^3
=指数
1000
18%5 =余数
3+4;5*2;5^2;18/4
=一行输入多个计算,用;相隔。
7
10
25
4
quit =退出
# bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation,
Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
scale=3
=设小数位
1/3
.333
quit
以上是交互的计算,那到也可以 不进行交互而直接计算出结果。
A.用echo和|法,如:
# echo "(6+3)*2" |bc
18
# echo 15/4 |bc
3
# echo "scale=2;15/4"
|bc
3.75
# echo "3+4;5*2;5^2;18/4"
|bc
7
10
25
4
另外,
bc除了scale来设定小数位之外,还有ibase和obase来其它进制的运算。
如:
//将16进制的A7输出为10进制, 注意,英文只能大写
# echo "ibase=16;A7"
|bc
167
//将2进制的11111111转成10进制
# echo "ibase=2;11111111"
|bc
255
//输入为16进制,输出为2进制
# echo "ibase=16;obase=2;B5-A4"
|bc
10001
对于bc还有补充,在bc --help中还可以发现:bc后可以接文件名。如:
# more calc.txt
3+2
4+5
8*2
10/4
# bc calc.txt
5
9
16
2
2)expr
expr命令可不光能计算加减乘除哦,还有很多表达式,都可以计算出结果,不过有一点需要注意,在计算加减乘除时,不要忘了使用空格和转义。下
面直接用实例来介绍一下expr的运算,如:
# expr 6 +
3
(有空格)
9
# expr 2 \*
3
(有转义符号)
6
# expr 14 % 9
5
# a=3
# expr
$a+5
(无空格)
3+5
# expr $a +
5
(变量,有空格)
8
#
a=`expr 4 + 2`
echo $a
6
# expr $a + 3
9
另外,expr对于字串的操作(计算)也是很方便的,如:
//字串长度
# expr length
"yangzhigang.cublog.cn"
21
//从位置处抓取字串
# expr substr "yangzhigang.cublog.cn"
1 11
yangzhigang
//字串开始处
# expr index
"yangzhigang.cublog.cn" cu
13
3)dc
用dc来进行计算的人可以不多,因为dc与bc相比要复杂,但是在进行简单的计划时,是差不多的,不算难。dc为压栈操作,默认也是交互的,但
也可以用echo和|来配合打算。
如:
# dc
3
2+
p
5
4*
p
20
quit
# echo 3 2+ 4* p |dc
20
4)echo
echo用来进行回显,是周知的事。上面也配合bc来进行计算。其实echo也可以单独进行简单的计算,如:
# echo $((3+5))
8
# echo $(((3+5)*2))
16
echo还可以进行变量的计算,如:
# a=10
# b=5
# echo $(($a+$b))
15
# echo $a+$b
10+5
# echo $a+$b |bc
15
//计算前天的日期
# echo `date
+%Y%m%d`
20090813
# echo `date +%Y%m%d`-2
20090813-2
# echo `date +%Y%m%d`-2
|bc
20090811
5)AWK
awk在处理文件的时,可以进行运算,那当然也可以单单用来计算了,如:
# awk 'BEGIN{a=3+2;print
a}'
5
# awk 'BEGIN{a=(3+2)*2;print
a}'
10
Awk 支持常见的运算符, 如 + (加),- (减), * (乘), / (除), ^ 或 ** (乘方), % (取模)
等等。 此外, awk 也提供了一些常用的数学函数, 比如 sin(x), cos(x), exp(x), log(x),
sqrt(x), rand()。 使用这些运算符和函数可以直接进行一些简单的运算:
# echo | awk '{print
8+6}'
14
# echo | awk '{print
8/6}'
1.33333
# echo | awk '{print
9%5}'
4
请放心使用
有问题的话请追问
满意请及时采纳,谢谢