shell编程

5、一些短脚本

(1)#取出log文件中带有“Value”的第二个匹配行
for ff in `ls *log`;do sed -n '/Value/p' $ff | sed -n 2p >> s2s2.dat;done

(2)#取出log文件中带有“Value”的第二个匹配行的第九列
for ff in `ls *log`;do sed -n '/Value/p' $ff | sed -n 1p | awk '{print $9}'>> s1s1.dat;done

(3)#将每一行的数字除以18然后输出到新文件中去
for line in `cat 330_bcl850.dat`;do echo "scale=5;$line/18"| bc >> 330bcl850.dat;done

(4)#将文件夹bcl_addh_gjf中的000.gjf 001.gjf...文件移动到frame0 1 2 ...9文件夹下
for i in 0 1 2 3 4 5 6 7 8 9;do mkdir frame$i;done
for i in 0 1 2 3 4 5 6 7 8 9;do mv bcl_addh_gjf/*"00$i"* frame$i;done

(5)#输出文件夹frame8中所有文件的相对路径,\为转义符
find frame8/* | sed 's/^/.\//' > 888.txt

(6)#将gjf文件转换成xyz文件
for i in `ls *dat`;
 do
     aa=`echo $i | sed 's/\.dat//g'`
     echo $aa
     wc -l $i | awk {'print $1 - 11'} > $aa.xyz;echo '' >>$aa.xyz
     head -n -3 $i | tail -n +9 >> $aa.xyz
     done
(7)#一列数求和,取平均,取极值等
cat r_270.dat | awk '{sum+=$1} END {print "average=",sum/NR}'     #sum
cat data|awk '{sum+=$1} END {print "Average = ", sum/NR}'     #average
cat data|awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}'   #max
cat data|awk 'BEGIN {min = 1999999} {if ($1<min) min=$1 fi} END {print "Min=", min}'    #min
cat rmsd_average.dat | awk '{print $2}' | awk 'BEGIN {min = 1999999} {if ($1<min) min=$1 fi} END {print "Min=", min}'   #min 第二列
awk '{x[NR]=$0; s+=$0; n++} END{a=s/n; for (i in x){ss += (x[i]-a)^2} sd = sqrt(ss/n); print "SD = "sd}' angle_sdt.dat  #求一列数的标准差

  (8)第二列去重

cat dis.dat | awk '!a[$2]++{print}' | awk '{print $2}'

4,、shell中的引号

单引号表示完全不希望处理引起来的字符,就是字符串

双引号与单引号一样,但是双引号会确切地处理引起来的文字中的转移字符、算术、命令替换等。

3,求一列数的标准差

awk '{x[NR]=$0; s+=$0; n++} END{a=s/n; for (i in x){ss += (x[i]-a)^2} sd = sqrt(ss/n); print "SD = "sd}' angle_sdt.dat

2,每隔50行取一下平均(作图用)

    awk '{SUM+=$1}NR%50==0{print SUM/50;SUM=0}END {if (NR%50) {print SUM/(NR%50)}}' angle_cpp.agr > angle.dat

1,文件去重,删除相同的行

(1)sort -u file3   或者   sort file3 | uniq     #先排序再去重

(2)awk ' !x[$0]++' file3   #直接去重

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值