生信分析常用linux命令:grep、sed、awk命令常用用法

1 篇文章 0 订阅
1 篇文章 0 订阅

相关视频链接:https://www.bilibili.com/video/BV1JF411e7LH
首先新建新文件,vim script.txt 之后将下面四行复制进文件,保存退出后运行bash script.txt

echo -e "\n\n\n\n\n\n\n\n\n\n" > le.tmp
awk  'BEGIN{FS=OFS="\t"}NR<11{print NR,"line_"NR"_col1","file1_line_"NR"_col_2","file1_line_"NR"_col_3"}' le.tmp > file1
awk  'BEGIN{FS=OFS="\t"}{print NR,"line_"NR"_col1","f2_l_"NR"_c_2","f2_l_"NR"_c_3"}'  le.tmp > file2
rm  le.tmp

grep常用用法:

grep 'line_5' file1   #搜索 file1 中含有 line_5的行 
grep 'line_5' file1  -n   #显示行号
grep 'line_5' file1  -v    #搜索不含有line_5的行
grep 'line_5_col1' file1  -w   #搜索含有line_ 5 _col1的词所在行
grep 'line_5' file1  -w   #搜索含有line_ 5 的词所在行
grep 'line_5' file1  -v -n  #搜索不含有line_5的行 显示行号
grep 'line_5' file1  -A 3  #搜索含有line_5的行,并输出之后3行 After
grep 'line_5' file1  -B 3   #搜索含有line_5的行,并输出之前3行 Before
grep 'line_5' file1  -C 3   #搜索含有line_5的行,并输出前后三行 Context 
grep 'line_5_col1' file1 -wnC 2 #参数合并

sed常用用法

sed   's/line_4/4444/g' file1 #将 file1 中line_4 替换为4444
sed -n  's/line_4/4444/g' file1 #取消默认输出
sed -n  's/line_4/4444/gp' file1 #只输出匹配后替换的行
sed  -n 's/line_4/4444/gp' file1 #
sed '1,5w sed.txt' file1 #将file1 1-5行写入sed.txt
sed “args1,args2,w filename.txt” filename-01 # sed 传入变量使用双引号

awk常用用法

awk ‘BEGIN{FS=”sep”;OFS=”sep”}{}END{}file  #标准句式1
awk ‘BEGIN{FS=”sep”;OFS=”sep”;print “context”}NR==num{print “contest”}{}{}END{print “context”}file #标准句式2
awk ‘BEGIN{FS=OFS=”sep”}{print “context”}file #常用句式

sep:文件分隔符,一般为“\t”:Tab分割,“,”:逗号分割。awk默认分隔符为一个或多个空格或tab。
awk内置变量:awk是逐行读取文本并按指定命令编辑文本,内置变量是指awk读入文本后,在awk内部解析出的变量或指定的变量,常用的有:
FS:输入字符风隔符,默认为空白字符,一般指定。
OFS:输出字段分隔符,默认为空白 字符,一般指定。
NR:文件行数。
FNR:多个文件从1开始分别计数的行号。

awk '{print $1}' file1 #$1 第一个字段,$n,第n个字段,$0,所有字段。
awk '{print $2}' file1
awk '{print $1,$2}' file1
awk '{print $1,$2}' file1 | cat -A
awk '{print $1\t$2}' file1
awk '{print $1\t$2}' file1 | cat -A
awk 'BEGIN{FS=OFS="\t"}{print $4,3}' file1 | cat -A
awk 'BEGIN{FS=OFS="\t";sum=0}{sum=sum+$1}END{print sum}' file1
awk  -v sum=0 'BEGIN{FS=OFS="\t"}{sum=sum+$1}END{print sum}' file1 #不能出现单引号,双引号内text原样输出。

awk结合数组

awk 'BEGIN{FS=OFS="\t"}{a[$2]=$0}END{print a["line_1_col1"]}' file1
awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$1]=$4}NR>FNR{print $0,"file1",a[$1]}' file2 file1
awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$1]=$4}NR>FNR{print $0,"file1",a[$1]}' file1 file2
awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$1]=$4}NR>FNR{if( $1 in a){print $0,"file1",a[$1]}}' file1 file2
awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$1]=$4}NR>FNR{if( $1 ~ "[0-9]"){print $0,"file1",a[$1]}}' file1 file2
awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$1]=$4}NR>FNR{if( $1 ~ "[A-Z]"){print $0,"file1",a[$1]}}' file1 file2
awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$1]=$4}NR>FNR{if( $1 ~ "[123]"){print $0,"file1",a[$1]}}' file1 file2
awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$1]=$4}NR>FNR{if( $1 ~ "[1,2,3]"){print $0,"file1",a[$1]}}' file1 file2
awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$1]=$4}NR>FNR{if( $1 ~ "11"){print $0,"file1",a[$1]}}' file1 file2

awk结合数组结合split

awk 'BEGIN{FS=OFS="\t"}{split($2,a,"_");print a[1],a[2],a[3]}' file1
awk 'BEGIN{FS=OFS="\t"}NR==FNR{ split($2,a,"_");b[a[1]]=$4}NR>FNR{if( $1 in a){print $0,"file1",b[$1]}}' file1 file2

awk'BEGIN{FS=OFS="\t"}NR==FNR{split($2,a,"_");b[a[2]]=$4}NR>FNR{if($1 in b){print $0,"file1",b[$1]}}' file1 file2

awk结合for循环

awk 'BEGIN{FS=OFS="\t"}{for(i=1;i<num;i++){print "text"}}' file1 #awk结合for循环;num为数字变量
awk 'BEGIN{FS=OFS="\t"}{for(i=1;i<NF;i++){print $i}}' file1
awk 'BEGIN{FS=OFS="\t"}{for(i=1;i<NF;i++){printf $i}print $NF}' file1
awk 'BEGIN{FS=OFS="\t"}{for(i=NF;i>1;i--){printf $i"______"}print $NF}' file1
 
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值