欢迎关注生信宝典:
Linux学习系列文章是生信宝典最开始主推的一块,力图从一个新额视角帮助初学者快速入门Linux系统,熟悉Linux下的文件和目录,文件操作, 文件内容操作。而且教程摒弃了完美操作,列举出,解惑Linux下多种信息输出方式。
在中简述了awk和sed的使用,作为一个引子。本篇则详细列举关于awk常用的操作和一些偏门的操作。
awk擅长于对文件按行操作,每次读取一行,然后进行相应的操作。
awk读取单个文件时的基本语法格式是awk 'BEGIN{OFS=FS="\t"}{print $0, $1;}' filename。
读取多个文件时的语法是awk 'BEGIN{OFS=FS="\t"}ARGIND==1{print $0, $1;}ARGIND==2{}' file1 file2。
awk后面的命令部分是用引号括起来的,可以单引号linux常用命令,可以双引号,但注意不能与内部命令中用到的引号相同,否则会导致最相邻的引号视为一组,引发解释错误。
OFS: 文件输出时的列分隔符 (output field separtor)
FS: 文件输入时的列分隔符 (field separtor)
BEGIN: 设置初始参数,初始化变量
END: 读完文件后做最终的处理
其它{}:循环读取文件的每一行
$0表示一行内容;$1, $2, … $NF表示第一列,第二列到最后一列。
column属性(当前字符位置的列号)和line属性(文件当前行号):在打开一个文件后,行和列指针都被设置为1。当前读:特殊的读操作,插入/更新/删除操作,属于当前读,需要加锁。低级文件i/omatlab低级文件i/o函数fclose 关闭文件feof 测试文件结束ferror 查询文件i/o的错误状态fgetl 读文件的行linux常用命令,忽略回行符fgets 读文件的行,包括回行符fopen 打开文件fprintf 把格式化数据写到文件或屏幕上fread 从文件中读二进制数据frewind 返回到文件开始fscanf 从文件中读格式化数据fseek 设置文件位置指示符ftell 获取文件位置指示符fwrite 把二进制数据写到文件里技术凝聚实力专业创新出版技术凝聚实力专业创新出版18.3.1 fopen函数? fopen函数打开一个文件并返回这个文件的文件句柄值。
a[$1]=1: 索引操作,类似于python中的字典,在ID map,统计中有很多应用。
ct@ehbio:~/sxbd$ cat ehbio.wig
variableStep chrom=chr2
300701 12.5
300702 12.5
300703 12.5
300704 12.5
300705 12.5
ct@ehbio:~/sxbd$ awk 'BEGIN{OFS=FS="\t"}{$2=$2*10^6/(2.5*10^6); print $0}' wig
tep chrom=chr2 0
300701 4.4
300702 4.8
300703 4
300704 4.8
300705 4.8
ct@ehbio:~/sxbd$ cat count
ID Type
Pou5f1 Pluripotency
Nanog Pluripotency
Sox2 Neuron
Tet1 Epigenetic
Tet3 Epigenetic
Myc Oncogene
ct@ehbio:~/sxbd$ awk 'BEGIN{OFS=FS="\t"}{if(FNR>1) a[$2]+=1;}END{print "Type\tCount"; for(i in a) print i,a[i];}' count
Type Count
Neuron 1
Epigenetic 2
Oncogene 1
Pluripotency 2
# 这个也可以用下面方式代替,但不直接
ct@ehbio:~/sxbd$ tail -n +2 count | cut -f 2 | sort | uniq -c | sed -e 's/^ *//' -e 's/ */\t/'
2 Epigenetic
1 Neuron
1 Oncogene
2 Pluripotency