相关库安装
#yum list |grep numpy
#yum install numpy
#yum list |grep scipy
#yum install scipy
#yum list |grep matplotlib
#yum install python-matplotlib
#yum list |grep numpy
#yum install numpy
#yum list |grep scipy
#yum install scipy
#yum list |grep matplotlib
#yum install python-matplotlib
awk对比sed:awk主要针对行内数据进行操作,sed主要是以行为单位进行操作
命令语法格式:
#awk '条件类型1{动作1} 条件类型2{动作2} ...' filename
awk过于复杂,所以以后慢慢练习。
1.awk 计算方差
#awk '{a[++i]=$1;} END{for(i in a)sum += a[i];ave=sum/NR;for(i in a) delta += (a[i]-ave)*(a[i]-ave);print delta/NR}' tmp
2.awk 实例一则
从文本中抽取出指定的行
当跑某些软件的时候,可能会遇到下面的错误:
“XXX share library” can not found
如果你可以确定这个库你已经安装好了,则可能是环境变量没有设置正确。主要环境变量就是LD_LIBRARY_PATH。
#whereis XXX //如果库的文件名是libXXX.so
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/the-result-of-last-commond/lib/
如想免去开机重启后的重复设置,将上面的export语句写到.bashrc文件中即可。
查看系统自带的解释:
#eval [arg ...]
The args are read and concatenated together into a single
command. This command is then read and executed by the shell,
and its exit status is returned as the value of eval.
If there are no args, or only null arguments, eval returns 0.
可以看出eval给shell提供了一种”根据变量的值,运行时确定所执行命令”的机制。
实践过程中遇到的一种情况就是”包含变量的变量名的赋值”操作。如下面这段代码:
//用一个for循环,给名称为test_1,test_2等变量赋值
#cat val_in_val.sh
#!/bin/bash
array=(11 22 33)
for i in $(seq 3)
do
#下行等价于: test_1=${array[0]} (i=0时)
eval test_${i}=${array[$((i-1))]}
#下面命令原理类似。其中'\'的作用是在eval执行时,
#直接保留'$'符号而不作为求值符号处理
#执行eval后,脚本中执行的等价于
#echo "test_1=$test_1" (i=0时)
eval echo "test_${i}=\$test_${i}"
done
#sh val_in_val.sh
test_1=11
test_2=22
test_3=33
用于输出文件的起始的部分数据
#head -n 2 file //输出file文件的前两行
#head -n -2 file //显示除最后2行之外的其他行
#head -c 2 file //显示文件的头两个byte
#head -c -2 file //显示除最后两个byte之外的所有内容
基本用法与head类似,但是也有更多高级的用法,详细内容请查看man tail
单纯就输出而言,没有’-‘符号的作用,而是’+’符号的应用。注意与head区分开。
#tail -n 2 file //输出file文件的最后2行
#tail -n +2 file //输出文件除其实2行之外的内容
#tail -c 2 file //输出file文件的最后2个byte
#tail -c +2 file //输出file文件除起始2字节之外的内容
打印一连串的数字,命令比较简单,直接上实例
#seq 4
1
2
3
4
#seq -s '#' 3 6 //替换默认的分隔符\n为'#'
3#4#5#6
#seq -f s%3g -s ' ' 3 0.5 4 //以步长0.5,按指定格式输出
s 3 s3.5 s 4
#seq -f %f -s ' ' 3 0.5 4 //浮点格式输出
3.000000 3.500000 4.00000
#seq -s '' 10 |sed 's/[0-9]/*/g' //输出11个*
***********
在日常的工作中,经常会需要使用fprint、fwrite之类的函数写文件。
当需要写或读的数据量较大时,使用操作系统默认的策略可能就不够高效。
通常的做法就是使用自定义的缓冲区减少I/O操作。下面分二进制文件和文本文件的读写进行说明。