Skip to content

Latest commit

 

History

History
100 lines (75 loc) · 2.84 KB

arithmatic.md

File metadata and controls

100 lines (75 loc) · 2.84 KB

数值计算

1.计算的数值的五种方法:

	((i++))
	let i++
	i=$(expr $i + 1)
	i=$(echo $i+1|bc)
	i=$(echo $i 1|awk '{printf $1+$2}')

2.time命令用来统计命令的执行时间,这部分时间包括总的运行时间,用户空间 执行时间,内核空间执行时间,它通过ptrace系统调用实现。

3.取模使用符号%,而求幂只有bc使用的符号为^,其他命令使用的符号均为**。

4.bc程序是Linux下的计算器,可以用来计算进制转换。例如:

	echo "obase:10;ibase8;11" | bc

另一种处理进制转换的方法是:

	echo $((8#20))

表示八进制的20,表示的十进制的值是多少。

5.浮点计算有两种方式: * 使用bc计算:

		echo "scale=3;1/13" | bc
  如果不加scale的话,需要使用下面的格式:
		echo "1/13" | bc -l
* 使用awk计算:
		echo "1 3" | awk '{printf("%0.3f",$1+$2)}'

6.$#表示传给脚本的参数个数,不包括当前可执行文件的在内,例如:

	./test.sh 1	# $#的值为1。

$?表示上一条命令的返回值。

7.环境变量RANDOM产生0到32767之间的随机数,awk的rand函数产生0到1之间的随机数。 在使用awk的rand函数的时候,需要首先用srand函数埋下种子,例如:

	echo "" | awk '{srand();printf("%f",rand());}

8.seq可以产生一系列数,这些数可以按照指定的间隔递增。例如:

	seq 5				# 产生1到5五个数字
	seq 1 2 6			# 产生数列 1 3 5
	seq -s : 1 5		# 产生数列 1:2:3:4:5
	seq -w 1 100		# 产生数列 001 002 ... 100
	seq -f "0x%g" 1 3	# 产生数列 0x1 0x2 0x3

9.sed的使用方法

* cat regular_express.txt | sed 's/[^a-zA-Z]/\n/g' | 	\
		sed '/^$/d' | sort | uniq -c | sort -k 1 -n -r | head
  上面的这条命令用于统计文本中出现次数最多的前十个单词,
  sed 's/[^a-zA-Z]/\n/g' 用来分割单词,sed '/^$/d'用来去除空行,
  sort 将分割好的单词排序,使得相同的单词排列在一起,这样就可以
  使用 uniq -c 来进行统计每个单词出现的次数了,最后将统计好的单
  词按照出现的次数排序,head 只提取出现在前十个的单词。
  
* cat index.html | sed -e 's/[^A-Za-z]/\n/g' | sed '/^$/d' | \
			grep '^the$' | uniq -c | sed 's/[^0-9]//g'
  查找 the 出现的次数

10.shift 每次都将命令行参数向左移动一个,因此当前要处理的参数总为$1

11.在使用bc进行进制转换的时候,涉及到将十六进制的数字转换为其他进制 时,十六进制的表示中的A-F均需要大写,且十六进制数前不需要使用0x, 且需要先写obase,再写ibase。例如:

   $ echo "obase=10;ibase=16;12a" | bc
   (standard_in) 1: syntax error
   $ echo "obase=10;ibase=16;12A" | bc
   298
   $ echo "ibase=16;obase=10;12A" | bc
   12A