美文网首页
Shell编程模板记录(不断更新...)

Shell编程模板记录(不断更新...)

作者: myshu | 来源:发表于2020-04-12 20:56 被阅读0次

由于在linux中处理流程时,有时候也需要用到shell脚本来串联程序,所以也和大家分享下我写Shell程序的脚本模板:

#!/bin/bash
#!/usr/bin/env bash 

help()
{
cat <<HELP
---------------------------------------------------------------
     Author: Myshu                                            
     Mail:myshu0601@qq.com                                   
     Version: 1.0                                              
     Date: 2020-04-12
     Description: 
---------------------------------------------------------------
USAGE: $0 <para1> <para2> ...
    or $0 -h # show this message
EXAMPLE:
    $0 para1 para2
HELP
exit 0
}
[ -z "$1" ] && help
[ "$1" = "-h" ] && help

in=$1
# 判断输出文件夹是否存在,若不存在则新建
out=$2
if [ ! -d "$out" ]; then
  mkdir $out
fi
# 判断文件是否存在,存在则删除 
rm file if [ -f file ]

echo ========== Start at : `date "+%Y-%m-%d/%H:%M:%S"` ==========

for i in $in/*.txt
do
      # 提取文件名
    name=$(basename $i _all.html)
    # grep加上-P匹配变量
    grep -P "^>$name\_" $i | sed 's/>\(.*\)<\/option>/\1/g'  >> $name.tmp
    # if 语句
    if [[ $note = "NA" ]] && [[ $act = "NA" ]];then
        continue
    fi
    # 读取文件
    for id in `cat $name.tmp`
    do
        echo -e "$id\t$act\t$note" >> $out
    done

done
echo ========== End at : `date "+%Y-%m-%d/%H:%M:%S"` ==========

1. 文件处理

# --- 1、逐行读取文件 ---
# 如果行包括空白符,则读取的时候空白会变成换行,解决办法
IFS_old=$IFS
IFS=$'\n'
for line in  `cat  rollback_config`
do
    echo "$line"
done;
IFS=$IFS_old
# --- 2、读取第几行第几列 ---
# print 到后带的是你要获取第几列,sed -n 是指定第几行。
ls -l | awk '{print $5}' | sed -n '2p'
# --- 3、对fasta文件进行重新编号 ---
awk '{ if( $0 ~ />/){num++;print ">test_Tag"num;}else{print $0}}' test.fa.tmp > test.FinalTag.fa
# --- 4、利用数组读取文件 ---
pname=(t t Phylum_all Class_all Order_all Family_all Genus_all Species_all)
for l in 2 3 4 5 6 7
do
    echo ${pname[$l]}
done
# --- 5、awk按照指定分隔符读取和输出文件 --
awk 'BEGIN{OFS="\t";FS="\t"}{print $1,$2,$3,$4}' test.txt
# FS指定输入分隔符
# OFS  指定输出分隔符
# RS 指定换行符,默认为\n
# ORS 指定输出换行符,默认为\n

# awk提取变量,使用两个双引号中间加个单引号
awk '{OFS="\\t"}{print "'"$sample"'",$4,$2,$5,$7,$8,$9,$10}'

2. 算术运算

((i=$j+$k))    等价于 i=`expr $j + $k`
((i=$j-$k))     等价于   i=`expr $j -$k`
((i=$j*$k))     等价于   i=`expr $j \*$k`
((i=$j/$k))     等价于   i=`expr $j /$k`

#通过改变$1可以指定哪一列,默认$1为第一列
列求和: cat you.txt |awk '{a+=$1}END{print a}'
列求平均值:cat you.txt |awk '{a+=$1}END{print a/NR}'
列求最大值:cat you.txt |awk 'BEGIN{a=0}{if ($1>a) a=$1 fi}END{print a}'  
#统计fasta文件有多少条序列
grep ‘>’ S_pastorianus.fasta | wc –l
#统计fastq文件中reads数目
awk '{s++}END{print s/4}' file.fastq
#统计文件夹内文件个数以及文件夹个数
#统计某文件夹下文件的个数
ls -l |grep "^-"|wc -l
ls -l |grep "^d"|wc -l
# calculate mean vmem计算不同单位的一列数据的平均值的算法
grep "vmem" run.detail.15_or96 | cut -f 4 -d "," |cut -f 2 -d "=" | sed 's/M$/\/1024G/g' | sed 's/G//g' | awk '{sum+=$1} END {print "vmem average = ", sum/NR}'

3. 正则匹配和替换

# 变量的替换
var='abca'
echo ${var/a/c}  # 替换一次
echo ${var//a/c}  #替换所有

# grep替换
# 识别Tab
grep $'\tABN\t' test.txt

也可以使用shopt打开全局的匹配

# 删除test/文件夹下除了file1和file2之外的其他文件
# 打开extglob
shopt -s extglob
cd test/
rm -f !(file1|file2)
# 关闭extglob
shopt -u extglob

相关文章

  • Shell编程模板记录(不断更新...)

    由于在linux中处理流程时,有时候也需要用到shell脚本来串联程序,所以也和大家分享下我写Shell程序的脚本...

  • Python编程模板记录【不断更新...】

    在写python脚本的时候可以套用模板+一些处理的语句例子更快的写好程序,因此想到来写这样的文章来与大家分享,有不...

  • Linux shell编程模板

    只要会写Linux命令,就可以写shell脚本。 之前基本上写的shell脚本都是Linux命令的组合,最多加入i...

  • shell 案例

    Shell编程一 Shell防范ARP攻击 Shell编程二 Shell防范DDos攻击 Shell编程三 ...

  • c++ 的神器

    这里先记录一些信息 模板编程

  • Shell脚本之杂项

    title: Shell脚本之杂项tags: shell编程, 杂项 记录一些学到的shell脚本里面的一些杂项(...

  • shell 第一天

    shell编程初识 1.1 shell编程初识 shell的定义 Shell 是命令解释器 Shell 也是...

  • 78.shell编程

    shell编程 Shell脚本,是一种为shell编写的脚本程序。 Shell编程跟JavaScript、Pyth...

  • 2019-01-25

    Linux系统Shell编程指南 前言 适合人群:有类似C编程基础的人 一、Shell编程介绍 Shell解释型语...

  • day 28

    shell编程基础 shell编程一小时光速入门web集群架构会用到shell编程基础 1、为什么要学shell编...

网友评论

      本文标题:Shell编程模板记录(不断更新...)

      本文链接:https://www.haomeiwen.com/subject/pbzbmhtx.html