awk 基本语法
#awk 读取单个文件
awk 'BEGIN{OFS=FS="\t"}{print $0, $1;}' filename
#awk 读取多个文件
awk 'BEGIN{OFS=FS="\t"}ARGIND==1{print $0, $1;}ARGIND==2{print $0;}' file1 file2
sed '3,10d' 1.txt #删除3至10行
awk '!(NR>=3 && NR<=10)' 1.txt
awk 'NR<3 ||NR>10' 1.txt
awk 'NR==3;NR==10' 1.txt #取出第3行,第10行
|| #代表或
! #代表取反
OFS #文件输出时的列分割符
FS #文件输入时的列分割符
BEGIN #设置初始参数,初始化变量
END #文件读完后的操作
{} #循环读取文件每一行
$0 #表示一行内容
$1 $2 $N #表示列
N #最后一列
NF #列号 NR #行号
FNR #当前文件读了多少行,常用于多文件操作
a[$1]=1 #索引操作,类似python 中的字典
#判断 FASTQ 文件中,输出质量值的长度是与序列长度不一致的序列 ID
awk '{if(FNR%4==1) ID=$0; else if(FNR%4==2) seq_len=length($0); \
else if(FNR%4==0) {quality_len=length($0); if(seq_len!=quality_len) print ID; }}'
awk '{print $1,$2}' 1.fasta #打印第一列,第四列
awk '{print $1 "\t"$2}' 1.fasta #制表符分割使文本对齐
awk '{print NR "\t" $1 "\t" $2}' 1.fasta
awk '{print NR "\t" $0}' 1.fasta #$0全部打印
awk 'NR==7{print NR "\t" $0}' 1.fasta #打印第7行
awk '{$3="xxxxx"; print $0}' 1.fasta #第3列用xxxx显示
awk '{print NF "\t" $0}' 1.fasta #NF显示每一行有多少列
awk '{print $NF}' 1.fasta #打印最后一列 print$(NF-1) 倒数第二
awk '$3==0 && $6=="123"' 1.fastq #根据条件过滤
awk '$3==0' 1.fasta #过滤第3列等于0的
awk '$3=="ATCG"' 1.fasta #数字对字符串注意加""
awk 'BEGIN{OFS=","} print( $1,$2) #设置输出分割符为,
awk '{print NR, FILENAME, $0}' 1.txt 2.txt
#合并2个文件,并显示行号与文件名称
awk -F : '/^root/{pritn $7}' 1.fasta
# -F 指定切割符号,^root匹配以root开头的行,打印第7列
awk -F : '/^root/{pritn $1","$7}' 1.fasta
#输出第1列和第7列;并且2列之间用,分割
awk -F : 'BEGIN {pritn "ATCGATCGGCT"} {pritn $1","$7} END {print "CGCCGCTGG"}' 1.fasta
#在文件内容前后添加新的内容,输出第1列和第7列;并且2列之间用,分割
awk -F : '{print FILENAME"," NR"," NF}' 1.fasta
#统计一个文件的每一行的行号,并统计列数(NR行号 NF列号)
grep |awk
#grep 过滤,awk 切割
awk '/^$/ {print NR}' 1.fasta
#查询空行所在的行号
#正则表达式语法
\ \n \\\\匹配\ , \\( 匹配(
^ 开头
$ 结尾
计算列的和
n+=2 即n=n+2
cat 1.txt |awk -F" " '{sum+=$2} END {print sum}'
#正则表达式 / /
awk '/abc/{print $0}' 1.txt
a/c 用 /a\/c/匹配 \/转译符号
a\c /a\\c/
a?c /a\?c/
#序列提取
awk 'BEGIN{OFS="\t"}ARGIND==1{if($0~/>/) {name=$0;
sub(">","",name); seq[name]=$0;} else seq[name]=seq[name]"\n"$0; }
ARGIND==2{print seq[$0];}' 1.fa csd.txt
网友评论