linux&github

Linux文本处理三剑客之awk

2020-04-12  本文已影响0人  R语言数据分析指南

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
上一篇 下一篇

猜你喜欢

热点阅读