1.基础的shell替换

当有很多同类型后缀名的文件时,可以用这种方法替换来取文件名(去后缀名)。。

for i in `ls *.1.fastq`
do
i=${i/.1.fastq/}
done

 

2.求和/平均值/最值

示例文件:

cat a.txt

1       2       3

4       5       6

7       8       9

 

2.1求和

直接求和:

awk '{sum +=$1}END{print sum}' a.txt

12

 

累计求和:

awk '{sum += $1}{print sum}' a.txt

1

5

12

 

2.2 平均值

求同列不同行的平均值

awk '{total +=$1}END{print total/NR}' a.txt

4

 

求同行不同列平均值:

awk '{ total = 0; for(i=1; i<=NF; i++) total += $i; print total/NF }' a.txt

2

5

8

 

2.3 最值

最大值:

awk '{print $3}' data.txt | sort -n | tail -n 1

 

最小值:

awk '{print $1}' data.txt | sort -n | head -n 1

 2.4 中位数

awk '{print $2}' 文件名 | sort -n | awk 'NR % 2 == 1 {median = $0} END {print median}'

3.对某列分类并各自计算数量

 

示例:

cat b.txt

A

A

B

C

A

B

C

A

A

A

C

 

awk '{print $1}' b.txt |awk -F ":" '{x[$1]++;}END{for(i in x) print (i"\t"x[i])} '

A       6

B       2

C       3

 

4.sort 对字符数字组合排序

使用sort -V实现对字母数字组合的排序。比如染色体名字:

cat chr.txt

chr4

chr1

chr2

chr3

chr11

chr12

chr24

chr24

chr10

chr9

 

sort -V chr.txt

chr1

chr2

chr3

chr4

chr9

chr10

chr11

chr12

chr24

chr24

 

5.去除空行

去除文件的空行,比如geta的结果就存在大量空行,直接使用可能会报错。可以用两种方式清除空行。

grep -v '^$' file.txt
sed '/^$/d' file.txt

 

6.awk外部变量

这种情况适用于当你写了一个shell循环中准备使用awk时,对于awk来说就引入了一个外部变量。

示例如下:

for i in `cat name.list`
do 
awk '{print name"\t"$2}' name="$i"  $i.file  
done

对于awk来说,这个$i想直接在awk里打印出来,就需要在后面加一个 OG="$i",来引入一个外部变量。

 

7.awk正则捕获

正则是非常好用的一套系统,perl python shell都可以使用,在awk里也可以使用match来正则捕获。

awk '{match($9,/ID=(\w+?);/,a); print a[1] }'

 

8.seq命令

利用seq来输出连续的数字或者有规律的数字。

 

seq基本规定是

1. seq + 选项 + 尾数

2. seq + 选项 + 首数 + 尾数

3. seq + 选项 + 首数 + 增量 + 尾数

 

比如基础功能,输出从1-24:

seq 24

 

输出从10-24

seq 10 24

 

输出从10-24,步进为3

seq 10 3 24

10

13

16

19

22

 

输出从10-24,步进为3,间隔符号为制表符

seq -s $'\t' 10 3 24