Linux学习生信入门之Linux基础与R基础wenwen

Linux实用基础3 find grep awk sed xar

2022-07-04  本文已影响0人  嘿嘿嘿嘿哈

主要学习自Linux操作与生物信息_哔哩哔哩_bilibili


生信入门 linux实用基础1 2 3

生信入门 R实用基础1 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表示只查找文件,过滤掉文件夹,块文件

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表示after
grep -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应用正则表达式的常用示例


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替换成a
sed '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分别替换为TAGC
tr -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!~')
find ./ -name '*.txt' |sed 's#\.#/media/sf_s#1'  |awk -F '/' '{print $NF"="$0}'  |sed 's/.txt//1'

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)

最常用参数:
-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

生信入门 R实用基础1 2

上一篇下一篇

猜你喜欢

热点阅读