首页 > 系统相关 >LINUX grep sed awk genek

LINUX grep sed awk genek

时间:2023-04-13 17:35:36浏览次数:36  
标签:datafile grep echo sed awk print txt

LINUX grep sed awk genek_sed

grep -o '^>\S\+' test.fasta | less -S

LINUX grep sed awk genek_linux_02

grep -o '^>\S\+' test.fasta | grep -o '[^>]\+'

LINUX grep sed awk genek_grep_03

sed 中的正则表达式

echo -e "A B\n\nC\tD\n \nE" > testfile

LINUX grep sed awk genek_grep_04

#查看格式

vi testfile
:set list

LINUX grep sed awk genek_linux_05

#删除空行

sed '/^$/d' testfile

LINUX grep sed awk genek_awk_06

删除只有空格的行

sed '/^ \+$/d' testfile

LINUX grep sed awk genek_sed_07


删除所有无字符的行

sed '/^\s*$/d' testfile

LINUX grep sed awk genek_awk_08

替换所有以A开头的行为NA

sed 's/^A.*$/NA/' testfile

匹配以wangy开始,后面跟任意个小写字母的行

sed '/^wang[a-z]*/p' datafile.txt

-n 抑制默认空间的输出

匹配以wangy开始,后面跟1个或多个小写字母

sed -n '/^wangy[a-z]\+/p' datafile.txt

匹配以wangy开始,后面跟0个或1个小写字母

sed -n '/^wangy[a-z]\? /p' datafile.txt

匹配以wangy开始,后面跟3个小写字母

sed -n '/^wangy[a-z]\{3\} /p' datafile.txt

匹配以wangy开始,后面跟3-7个小写字母

sed -n '/^wangy[a-z]\{3,7\} /p' datafile.txt


匹配连续出现2次123的行

sed -n '/\(123\)\{2\}/p' datafile.txt
sed -n -r '/(123){2}/p' datafile.txt


使用分组及后向引用,交换表格第1列和第二列顺序

sed -r 's/^(\S+)\s+(\S+)/\2 \1/' datafile.txt
sed -r 's/^(\S+)(\s+)(\S+)/\3\2\1/' datafile.txt


3.4 sed 的多项编辑

对同一文件使用多条命令,可以使用一下三种方式实现:

-e       ;        -f

sed -e 's/wuhan/WUHAN/i' -e 's/beijing/BEIGING/i' datafile.txt
sed 's/wuhan/WUHAN/i ; s/beijing/BEIJ/i' datafile.txt
echo "s/wuhan/WUUHANN/i" >script.txt
echo "s/beijing/BEIJJJJ/i" >> script.txt
sed -f script.txt datafile.txt

使用大括号对同一地址范围使用多条命令

sed  '1,4{ s/wuhan/WUHANNNN/i ; s/beijing/BEIJINGGGGG/i }' datafile.txt
sed -n '1,4{s/wuhan/WUHANNNNN/i ; s/beijing/BEIIIIII/i ; p}' datafile.txt
sed -n '1,4{s/wuhan/WU/i ; 2,3s/beijing/BEI/i ; p}' datafile.txt

  

sed -n '1,2s/^/test/p' datafile.txt
sed -n '1,2s/^\S\+{4}/test/p' datafile.txt


sed -n '1,2s/^/test/p' datafile.txt
sed -e '1,2s/wuhan/WUHAN/i' -e '1,2s/WUHAN/WUHANtest/i' datafile.txt

echo -e "1,2s/wuhan/WUHAN/i\n1,2s/WUHAN/WUHANtest/i" > script1.txt
sed -f script1.txt datafile.txt

sed -i '1,2s/wuhan/WUHAN/i' datafile.txt

sed -E 's/^wang\S+/test/' datafile.txt 
sed -r 's/^wang\S+/test/' datafile.txt


基于 id 对应表格,将 fasta 文件中的基因 ID 替换成新 ID

LINUX grep sed awk genek_sed_09


sed -r 's:^(\S+)\s+(\S+)$:s/^>\2/>\1/:' id.table

s/// 可替换为界定符 s::: 效果是一样的

LINUX grep sed awk genek_sed_10

sed -r 's:^(\S+)\s+(\S+)$:s/^>\2/>\1/:' id.table > changeid.txt
sed -f changeid.txt test.fasta |less -S




AWK

 内置变量 FS 中保存输入字段分隔符   -F(指定分隔符)

  NF 中记录当前记录的字段个数      $NF 最后一列

awk '{print NF,$NF}' datafile.txt
awk -F '@' '{print NF , $1}' datafile.txt


输出字段分隔符 -v OFS=':'

默认的输出字段分隔符是  空格 即NF , $1之间的逗号,输出为空格

awk  '{print NF , $1}' datafile.txt
awk -v OFS=':' '{print NF , $1}' datafile.txt


print

echo "hello"|awk '{print $0 "world"}'
echo "hello"|awk '{print $0 , "world"}'

echo "hello"|awk '{print $0 ; print "world"}'l

printf

LINUX grep sed awk genek_awk_11

echo 'hello world' | awk 'BEGIN {print "hello XXX"}'
echo -e 'helloworld\nHELLOWORLD' | awk '{printf $1}'


echo hello | awk '{printf "%s\n",$1}' 

echo 1.2 | awk '{printf "%d\n",$1}'
echo 1.2 | awk '{printf "%f\n",$1}'
echo 1.2 | awk '{printf "%e\n",$1}' #科学计数法
echo 1.2 | awk '{printf "%e\n",$1}'

指定输出的宽度和对齐方式

echo "hello" |awk '{printf "[%10s]\n", $1}' #宽度10,默认右对齐
echo "hello" |awk '{printf "[%-10s]\n", $1}' #宽度10,指定左对齐

echo "1.2"| awk '{printf "[%6.2f]\n", $1}' #对浮点数设置宽度和精度
echo "hello" |awk '{printf "[%6.2s]\n", $1}' #对字符串设置宽度和精度

echo "hello" |awk '{printf "[%.2s]\n", $1}' #对字符串设置精度
echo "hello" |awk '{printf "[%-10.2s]\n", $1}' #对字符串设置宽度10和精度2

LINUX grep sed awk genek_linux_12


awk表达式:

echo "ABS" | awk '{a = $1 ; print a}'
echo "ABS" | awk '{a = $1 ; print $0 , a}'
echo "ABS" | awk '{a = $1  $1 ; print a}'

LINUX grep sed awk genek_linux_13

计算

LINUX grep sed awk genek_grep_14

echo "1 2" | awk '{a=$1;b=$2+1;avg=(a+b)/2;print avg}'

LINUX grep sed awk genek_linux_15


关系运算

LINUX grep sed awk genek_linux_16


布尔运算

LINUX grep sed awk genek_grep_17


awk '/wangying/' datafile.txt
awk '!/wangying/' datafile.txt
等价于
awk '$0 ~ /wangying/' datafile.txt
awk '$0 !~ /wangying/' datafile.txt

LINUX grep sed awk genek_awk_18


LINUX grep sed awk genek_sed_19

判断

LINUX grep sed awk genek_grep_20


LINUX grep sed awk genek_sed_21


逻辑判断 或||  与&&  非 !

echo -e '10\n20\n30' > test1
awk '$1>25 || $1<15' test1
awk '$1>15 && $1<25' test1
awk '!($1>15)' test1

LINUX grep sed awk genek_awk_22



BEGIN模式 END模式

awk 'BEGIN{print "hello world"}'
echo   -e '1\n2' | awk 'BEGIN{print "START"} {print $0}'
echo -e '1\n2\n3\n4' | awk '{s = s + $1 ; print s}'
echo -e '1\n2\n3\n4' | awk '{s = s + $1} END {print "SUM=" s}'

LINUX grep sed awk genek_awk_23


if判断

echo '1 2'
echo '1 2' | awk '{if($1<$2) {print$1 ;print$1+$2}}'
echo '1 2' | awk '{if($1<$2) {a=$1+$2 ; print$1; print a}}'

echo -e '1 2\n4 3'
echo -e '1 2\n4 3' | awk '{if ($1<$2) {print $1} else {print $2}}'

LINUX grep sed awk genek_awk_24


echo -e '1 2\n4 3\n5 5' |\
awk '{if ($1<$2){print $2} \
else if($1==$2) {print "eq"} \
else {print $1}}'

LINUX grep sed awk genek_sed_25


for 循环

echo -e '1 2 3\n4 5 6' |\
awk '{for(i=1;i<=3;i++) {sum = sum + $i } ; print "sum=" sum}'

LINUX grep sed awk genek_grep_26

 

数组

echo -e "1 2 3\n4 5 6"|\
awk '{A[NR] = $1+$2+$3} END {for(i=1;i<=NR;i++) {print i,A[i]}}'
 
echo -e "1 2 3\n4 5 6"|\
awk '{A[NR] = $1+$2+$3} END {for(i in A) {print i,A[i]}}'

echo -e "1 2 3\n4 5 6"|\
awk '{A[NR] = $1+$2+$3}\
END {for(i=1;i<=NR;i++){print i,A[i];sum=sum+A[i]};{print "sum=" sum}}'

echo -e '1 2 3\n4 5 6' |\
awk '{A[NR]=$1} END {if(2 in A){print 2,A[2]}}'

LINUX grep sed awk genek_grep_27


内置函数

计算字符串长度 length

echo 'ABC abc' |awk '{print length($1)}'

字符串替换函数sub与gsub

echo 'ABC abc' | awk '{sub(/B/,"b",$1) ;print$0}'

echo 'ABC abc' | awk '{sub(/[A-Z]/,"U",$0) ;print$0}'
echo 'ABC abc' | awk '{sub(/[A-Z]+/,"U",$0) ;print$0}'

echo 'ABC abc' | awk '{gsub(/[A-Z]/,"U",$0) ;print$0}'
echo 'ABC abc' | awk '{gsub(/[A-Z]+/,"U",$0) ;print$0}'

echo 'ABC abc' | awk '{gsub(/[a-zA-Z]/,"*",$0) ;print$0}'
echo 'ABC abc' | awk '{gsub(/[a-zA-Z]+/,"*",$0) ;print$0}'

LINUX grep sed awk genek_sed_28


提取字符串substr

substr(字符串,起始位置)
substr(字符串,起始位置,长度)

提取第三个字符开始长度为2的子串
echo "abcdefg" |awk '{ print substr($1,3,2)}'

指定的长度超过字符实际范围,则返回实际长度
echo "abcdefg" |awk '{ print substr($1,3,10)}'

省略长度时,返回指定位置开始到结尾的子串
 echo "abcdefg" |awk '{ print substr($1,3)}'

LINUX grep sed awk genek_linux_29


切分字符串成数组 split

split(字符串, 数组,分隔符)
echo "ABC abc"|awk '{ n=split($0,uu," ") ; print n, uu[1],uu[2]}'
echo "ABC abc"|awk '{ split($0,uu," ") ; print  uu[1],uu[2]}'

LINUX grep sed awk genek_awk_30


内置算数函数

LINUX grep sed awk genek_awk_31

int 函数
awk 'BEGIN{print int(10.056)}'

log函数和exp函数
awk 'BEGIN{print log(10),exp(10)}'

rand和strand函数
awk 'BEGIN{print rand()}'
awk 'BEGIN{srand(12);print rand()}'



实战一:计算 fasta 文件每条序列长度及总长

LINUX grep sed awk genek_grep_32

less -S test.fasta | awk '{if ($1 ~ /^>/) \
{if(NR>1){print ""};printf $1"\t" } else {printf $1}}' \
| awk '{print $1,length($2)}' |sed 's/^>//' \
| awk '{print ;sum += $2} END {print "total_length=" ,sum}'

LINUX grep sed awk genek_linux_33

方法二

less -S test.fasta | awk '{if ($1 ~ />/)\
{{print id,len};id=$1;len=0} else {len+=length($1)}}\
END{print id,len}' | sed 's/>//'\
|awk '{print ;sum+=$2}END{print "total_length=",sum}'


实战二:统计 gff3 文件每个转录本长度。测试数据为拟南芥 1 号染色体

gff3 文件。


less -S test.gff3 | \
  awk '$3 ~ /exon/' | \
  sed -r 's/^(.*Parent=([^;]+);.*)$/\2\t\1/'|\
  awk '{print $1,$6-$5+1}'|\
  awk '{A[$1]=A[$1]+$2} END {for(id in A) {print id,A[id]}}'

统计gff3 文件每个转录本的exon数量

less -S test.gff3 | \
  awk '$3 ~ /exon/' | \
  sed -r 's/^(.*Parent=([^;]+);.*)$/\2/'|sort |uniq -c|
less -S test.gff3 | \
  awk '$3 ~ /exon/' | \
  sed -r 's/^(.*Parent=([^;]+);.*)$/\2/'|\
  awk '{A[$1]=A[$1]+1} END {for(id in A) {print id,A[id]}}'|less -S


总结

LINUX grep sed awk genek_grep_34


LINUX grep sed awk genek_grep_35


LINUX grep sed awk genek_linux_36


LINUX grep sed awk genek_grep_37


标签:datafile,grep,echo,sed,awk,print,txt
From: https://blog.51cto.com/u_15622529/6188266

相关文章

  • 笨办法学 Python · 续 练习 9:`sed`
    练习9:sed原文:Exercise9:sed译者:飞龙协议:CCBY-NC-SA4.0自豪地采用谷歌翻译使用这些小型项目来研究你自己是有用的,但让我们来看看你主要关注的主题:开始工作的启动流程,例如你的文本编辑器,你可以打字打的多好,以及计算机内部发生的其他事情。心理状态,当你开始工作时,建议将日志作为......
  • 笨办法学 Python · 续 练习 7:`grep`
    练习7:grep原文:Exercise7:grep译者:飞龙协议:CCBY-NC-SA4.0自豪地采用谷歌翻译find命令在45分钟内应该可能是一个挑战,但它是一个很好的挑战。到了这个时间,你应该可以去掉尽可能多的,阻止你开始的障碍。你可能会发现,当你清除一些障碍时,你的技能会变得更糟。例如,我以前在开始工作......
  • 501 Not authorised
    相关连接:chrony4.2.Ikeepgettingtheerror501NotauthorisedThiserrorindicatesthatchronycsentthecommandtochronydusingaUDPsocketinsteadoftheUnixdomainsocket(e.g./var/run/chrony/chronyd.sock),whichisrequiredforsomecommands.Fors......
  • 论文解读( FGSM)《Adversarial training methods for semi-supervised text classificat
    论文信息论文标题:Adversarialtrainingmethodsforsemi-supervisedtextclassification论文作者:TaekyungKim论文来源:ICLR2017论文地址:download 论文代码:download视屏讲解:click1 背景1.1 对抗性实例(Adversarialexamples)通过对输入进行小扰动创建的实例,可显著增加机器......
  • awk原理
    LinuxShell编程awk命令JAVA编程Linux学习 2023-04-0408:00 发表于山东收录于合集#awk1个#linux36个概述awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动......
  • 迁移学习()《Attract, Perturb, and Explore: Learning a Feature Alignment Network fo
    论文信息论文标题:Attract,Perturb,andExplore:LearningaFeatureAlignmentNetworkforSemi-supervisedDomainAdaptation论文作者:TaekyungKim论文来源:2020ECCV论文地址:download 论文代码:download视屏讲解:click1摘要提出了目标域内的域内差异问题。提......
  • AIX系统下sed的用法与实例——查询/打印/替换字符串并生成文件/删除
    sed是AIX中非常重要的文本流编辑器,它对输入的文本进行查询/打印/替换/删除等操作,并将结果写到标准输出。sed 命令包含很多功能,用于选择要修改的行,并只对选择的行作更改。首先,使用sed命令请记住:sed命令以行为单位对文本进行处理,处理完当前行,接着下一行文本输入进行处理,依次循环......
  • shell读取配置文件-sed命令
    在编写启动脚本时,涉及到读取配置文件,特地记录下shell脚本读取启动文件的方式。主要提供两种格式的读取方式,方式一配置文件采用“[]”进行分区,方式二配置文件中需要有唯一的配置项名称。配置文件格式如下:#cat-nconfig.ini1#MYSQL配置项2[MYSQL]3DB_HOST......
  • 迁移学习《Cluster-Guided Semi-Supervised Domain Adaptation for Imbalanced Medica
    论文信息论文标题:Cluster-GuidedSemi-SupervisedDomainAdaptationforImbalancedMedicalImageClassification论文作者:S.Harada,RyomaBise,KengoAraki论文来源:ArXiv2March2023论文地址:download 论文代码:download视屏讲解:click1摘要一种半监督域自适应方法,......
  • 异常检测 | 迁移学习《Anomaly Detection in IR Images of PV Modules using Supervis
    论文信息论文标题:AnomalyDetectioninIRImagesofPVModulesusingSupervisedContrastiveLearning论文作者:AbhayRawat, IshaDua, SauravGupta, RahulTallamraju 论文来源:LukasBommes,MathisHoffmann,ClaudiaBuerhop-Lutz,TobiasPickel,JensHauch,Christ......