Linux实用底子3 find grep awk sed xargs

分享
藏宝库编辑 2024-9-30 08:55:14 146 0 来自 中国
主要学习自Linux利用与生物信息_哔哩哔哩_bilibili
生信入门 linux实用底子1 2 3

  • Linux实用底子1
  • Linux实用底子2
  • Linux实用底子3 find grep awk sed xargs
生信入门 R实用底子1 2

  • R实用底子1——根本设置与利用
  • R实用底子2——常用数据处置惩罚下令
1 文件搜刮 find

参考
linux 根据文件巨细查找文件 - 向阳的向日葵 - 博客园 (cnblogs.com)
linux通配符和正则表达式_疯狂的步伐员11的博客-CSDN博客_mv 正则表达式
find ./ -name  '*.fna'                                搜刮当前目次下以.fna末了的文件find ./ -amin 5                                         搜刮当前目次下近来5分钟天生的文件find ./ -size  +1k                                      搜刮当前目次下大于1k的文件find ./ -name '*.fna' -exec rm '{}' \;                  搜刮当前目次下以.fna末了的文件并实验删除find ./ -size +10M  -mtime -2                          查找当前路径下,文件巨细大于100M,并且2天内更 新过的文件,表现出来find ./ -size  +10M  -size -20M                        查找当前路径下,文件巨细大于10M小于20M的文件find ./ -type f -mtime -1 -size +100k -size-400k       -type f表现只查找文件,过滤掉文件夹,块文件

  • 通配符与正则表达式:
    通配符用于匹配文件名,由shell剖析的,好比find,ls,cp,mv等下令支持通配符查找文件名。
    正则表达式元字符有字符匹配、匹配次数、位置锚定、分组。主要是处置惩罚文本里的内容,用来匹配文本里的字符串,针对文件内容的文本过滤工具里,多数用到正则表达式,如grep,sed,awk,vim, less,nginx,varnish等下令支持正则表达式。

    更多正则表达式学习可看这个:你是怎样学会正则表达式的? - 知乎 (zhihu.com)
2 文本筛选 grep

参考grep下令详解;单引号和双引号区别 - 刷子丶 - 博客园 (cnblogs.com)


单、双引号区别


  • 单引号:可以说是所见即所得:即将单引号内的内容原样输出,大概形貌为单引号内里看到的是什么就会输出什么。单引号''是全引用,被单引号括起的内容不管是常量还是变量者不会发生更换。
  • 双引号:把双引号内的内容输出出来;假如内容中有下令、变量等,会先把变量、下令剖析出结果,然后在输出终极内容来。双引号""是部门引用,被双引号括起的内容常量还是常量,变量则会发生更换,更换成变量内容。
  • 不加引号:不会将含有空格的字符串视为一个团体输出, 假如内容中有下令、变量等,会先把变量、下令剖析出结果,然后在输出终极内容来,假如字符串中带有空格等特别字符,则不能完备的输出,必要改加双引号,一样寻常一连的字符串,数字,路径等可以用。
  • 利用规则:一样寻常常量用单引号''括起即可,假如含有变量则用双引号""括起,无变量无空格无特别字符的一连字符串可不加引号
  • 最大差别:单引号与双引号的最大差别在于双引号仍然可以保有变数的内容,但单引号内仅能是一样寻常字符,而不会有特别符号,
常用下令示例

grep ">" a.txt | wc -l                    搜刮文件中含有'>'的行,并统计行数grep -c ">" a.txt                           统计有'>'的行数, 等价于同上grep -w "chr1" a.txt                     搜刮全词准确匹配'chr1'的行,-w表现整个word都匹配上grep -n "chr1" a.txt                      搜刮含有字符'chr1'的行并列出行号grep -vc "chr" a.txt                    统计不含'chr'的行数的个数grep 'chr' a.txt | grep -v 'chrX'       搜刮文本中含有Chromosome的行并排除有Annotation 行       grep -e "chrX" -e "chrY" a.txt           参数-e举行多项利用(指定多个匹配模式,只要符合一个都会被输出)grep -w "chr1" a.txt -A 2                 搜刮全词准确匹配'chr1'的行行并列出下面两行。 -A表现aftergrep -w "chr1" a.txt -B 2                 利用grep的-B选项,表现匹配内容及其前n行。-B表现before。grep -w "chr1" a.txt -C 2                 利用grep的-C选项,表现匹配内容及其前n行和后n行。ls /usr/bin/ | grep "\.py"                      搜刮特定目次下名字包罗'.py'的文件('.'必要转义'./')ls /usr/bin/ | grep "\.py\b"  或  "\.py$"        搜刮特定目次中以'.py'末了的文件( '\b'或'$'表现末了)ls /usr/bin/ | grep "^ht"                        搜刮特定目次中以'ht'开头的文件grep 1[1-9]  a.txt                             应用正则表达式搜刮包罗'11'-'19'的行 grep -vP "^\s*$" 1.txt                         去除空白行 grep -P "^\d{11}$" 1.txt                      匹配含11位数字的行grep应用正则表达式的常用示例


  • .  更换某个字符(换行符除外),如 grep "e.t" 1.txt
    \ 转义,如  .不能更换自身,需用\.来转义
    *通配符可匹配前面的子表达式0或多次,如go*可匹配g和gooo,常常和 .一起利用.*可匹配恣意字符无穷多次
  • ?和+,{},|, [] 等利用必要用grep -E ,即扩展的正则表达式
    + 表现匹配1次及以上
    ?表现匹配0或1次
    {1,10}表现重复1到10次
    |表现大概,择意匹配,如grep -E "eat|cat" 1.txt,匹配eat或cat
    []  匹配括号内恣意字符,如 grep -E "[ec]at" 1.txt

    3.png
  • grep不支持以下字符集简写,必要用grep -P


    5.png
    ^\s*$表现行首与尾都是空白(即空白行)
    去除空白行 :grep -vP "^\s*$" 1.txt
    匹配11位电话号码:grep -P "^\d{11}$" 1.txt
3 sed (stream  editor,流编辑器)    (以每举动单元编辑)

注意sed结果默认为屏幕输出,并不改变原来文件内容,常用>重定向生存修改文件
sed
-e        默认模式,一样寻常用于多项修改,之后常用>重定向生存修改文件
-i         在原文件上直接举行修改
-n        安静模式,仅表现处置惩罚后的结果,常与p连用,只输出发生更改的特定行
-f          接脚本文件


  • 各种更换利用:
sed 's/NC/nc/g'   1.txt >2.txt      对文件中的NC更换成nc并另存为,s表现更换,g表现全局,下令一样寻常用  ' '括起来sed 's/A/a/2'     1.txt               对文件中的每行第2个A更换成ased 's/b/B/g;s/a/A/g'  1.txt         更换b和a为大写,同时举行多项利用可用`;`分隔开sed '1,5s/:/?/g'  2.txt                只对文件的1至5行内容举行更换':'为'?'sed '1,5!s/:/?/g'  2.txt               只对文件的1至5行内容不举行更换,!表现非sed  '/>/!s/A/a/g'  gene.fasta       对含有>的行不举行利用,其他行举行更换sed  '/beat/,/ggle/s/o/O/g' 1.txt    将含有'beat' 和'ggle'字符行的中心行的'o'更换成'O',选择条件之间用`/`和`,`隔开# sed常用的应用:  将fastq格式转化为fasta格式zcat A.1.fq.gz |sed '0~4d' |sed '0~3d' |sed 's/^@/>/1' |less若想要同一时间逐个更换多项内容则必要用y选项,如ATCG分别更换为TAGC,(注意默认为全局更换,末了不加g)
sed  '/>/!y/ATCG/TAGC/'  gene.fasta      (含有>的行不举行更换)各种删除与输出利用:

sed  '/^\s*$/d'   1.txt                   删除文件中空白行,^\s*$表现行首与尾都是空白(即空白行),d表现删除sed  '3,10d'   1.txt                      删除文件第3至10行sed  '3,$d'  1.txt                        删除文件中第3行及之后全部行的内容sed -n '3,10p'  1.txt                输出文件第3至10行sed -n '3p;10p' 1.txt                输出文件第3行和10行,也可写成   sed -ne '3p' -e '10p'  1.txt      sed -n  's/NC/nc/p'   1.txt      只输出发生'NC'/'nc'更换的行sed -n '/Chromosome:/p'  gene.txt   输出含有Chromosome:的行sed   's/:.*//g'  2.txt               删除文件中每行的:及之后的全部内容,即把:后的全部内容(用.*表现)更换为空若想在sed利用多项下令,还可以在输入第一个 '  后回车,即可在>后输入多下令
tr下令

tr下令可看做简化版本的sed  ,类似于sed的y选项下令,常用于更换巨细写等
tr [A-Z] [a-z] <a.txt                   全局更换巨细写tr [ATCG] [TAGC] <a.txt     将ATCG分别更换为TAGCtr -d [chr] <a.txt               删除文件中的chr字符 d表现删除4 惊人的awk:强盛的文天职析工具(以每列为单元编辑)

(一样寻常常用gawk版本)
-f       progfile               接脚本
-F      file-separator      分隔符
-v      var=var                变量
常用下令示例

awk '{print $1,$3}' 1.txt                                                输出文件第1和3列  ,下令用在'{ }'里写,$0表现输出整行awk '{print $NF}' 1.txt                                                  输出文件末了一列(NF表现末了字段)awk '$1>$2'  1.txt                                                        输出第1列数值大于第二列数值的行awk '$4>300 && $4<800'  1.txt                                             输出第4列数值大于300小于800的行awk -F "\"" '{print$4}'  1.txt                                           #以"为分隔符(\"转义),输出第4列awk -F '"' '{print $2,"name:\n"$4}'   1.txt                        可以在print输出中添加字符内容 name:\n(换行符)awk '{if ($1>=500 && $2>=1000) print $0}' x.txt                         对文本设置条件筛选举行输出awk '{if ($1>200 && $2>500) print $0}' x.txt |sort -n -k1 |uniq |wc     统计符合筛选条件的数据awk '{if ($1>1000) print "SoBig!!!:"$1 ;else print "Normal"}'  x.txt               利用if else 语句举行条件筛选输出awk '$0~/chrmt/{print $0}'  1.txt                       输出文件中包罗有'chrmt'的行awk -F ':' '$2~/10/{print $0}'  1.txt                    以:为分隔符,输出第2列数值为10的行(若排除2列则为'$2!~')

  • 天生.txt文件列表,便于之后写步伐批量化处置惩罚数据(注意当用\易肴杂时可用#作为分隔符):
find ./ -name '*.txt' |sed 's#\.#/media/sf_s#1'  |awk -F '/' '{print $NF"="$0}'  |sed 's/.txt//1' 6.png BEGIN与END


利用前后添加语句:
awk 'BEGIN{print "\nThe Work Begin!!!\n" } {if($1>200 && $2>500) print $0} END{print "\n THE WORK END!!!!!\n"}' x.txt  5 参数转达xargs

参考xargs下令详解,xargs与管道的区别 - 薰衣草的旋律 - 博客园 (cnblogs.com)

  • xargs与管道的区别
    xargs转达的是下令行参数:xargs下令可以通过管道继续字符串,并将吸收到的字符勾通过空格分割成许多参数(默认环境下是通过空格分割) 然后将参数转达给其反面的下令,作为反面下令的下令行参数;管道符转达的是尺度输入,字符串
    如:
    echo '--help' | cat                该下令输出的是echo的内容:'--help'
    echo '--help' | xargs cat        等价于 cat --help ,输出cat 资助文档信息
    find ./ -name '*.txt' | rm                                                                              此利用无效
    find ./ -name '*.txt' |xargs rm                                                                   搜刮文件名后举行删除
    find ./ -name '*.txt' |xargs tar -zcvf 10.tar.gz                                         搜刮特定文件名后举行打包压缩
  • xargs常用应用:利用xargs克制特定进程:
    sleep 500 &                                                                将进程sleep放入配景运行
    ps -u 'gu' | awk '/sleep/{print $1}' | xargs kill       列出用户gu下的进程,搜刮sleep进程并列出第一列的pid号,kill步伐
  • 参数:
最常用参数:-d                  分隔符,默认为换行符/n -i              (不是全部linux都支持) 大概是-I,将xargs的每项名称,一样寻常是一行一行赋值给 {},可以用 {} 取代。-n             num 反面加次数,表现下令在实验的时间一次用的argument的个数,默认是用全部的(注意-I -L -n是倾轧的)其他:-a                   接文件,从文件中读-e           flag,注意有时间大概会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时间就克制-L             -l 同 -L, num 从尺度输入一次读取 num 行送给 command 下令。-p              当每次实验一个argument的时间扣问一次用户。 -P              修改最大的进程数,默认是1,为0时间为as many as it can ,应该寻常都用不到的吧-r                no-run-if-empty 当xargs的输入为空的时间则克制xargs,不消再去实验了。-s                num 下令行的最大字符数,指的是 xargs 反面谁人下令的最大下令行字符数-t                     表现先打印下令,然后再实验-x                     exit的意思,主要是共同-s利用

  • 利用示例
cat test.txt  | xargs                            xargs  默认是echo的功能,打印内容并去除换行符cat test.txt  | xargs   -n3                      每行打印3个单词为一行( 字符排成3列)cat test.txt | xargs -d: -n3                     以:为分隔符, 每行输出3 列内容搜刮指定目次下的txt文件,将其复制到当前目次,并将其打包:
find ~/wk/ -name '*txt' | xargs -i cp {} ./  | tar -zcvf hhh.tar.gz  *.txt  生信入门 linux实用底子1 2 3

  • Linux实用底子1
  • Linux实用底子2
  • Linux实用底子3 find grep awk sed xargs
生信入门 R实用底子1 2

  • R实用底子1——根本设置与利用
  • R实用底子2——常用数据处置惩罚下令
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2025-3-10 07:05, Processed in 0.260215 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表