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