美文网首页
文本处理

文本处理

作者: 大吉岭猹 | 来源:发表于2019-04-27 20:07 被阅读0次

    首先得到示例文件

    • wget URL 从指定的URL下载文件

    文件内容查看和处理

    • cat 全显示
    • hexdump 显示文件十六进制格式
      • 常用的大型数据文件一般存为ASCII码形式(像几大基因bank的数据文件),而我们自己认为创建的常为UTF-8,所以有时候认为处理文件需要会碰到把UTF-8编码的字符插入到ASCII码文件里去了。遇到这种问题,我们可以用hexdump -c命令查看出错的地方。
    • od 输出文件的八进制、十六进制等格式编码的字节
    • tail 在屏幕上显示指定文件的末尾若干行
    • head 在屏幕上显示指定文件的开头若干行
    • 取特定行可以head+tail
    • less 分屏上下翻页浏览文件内容
      • -S 严格按行显示
      • -N 加个行号
      • /<pattern>往下搜索模式,?<pattern>往上搜索模式,n前一个匹配字符,N后一个匹配字符。
    • more 显示文件内容,每次显示一屏
    • wc 文件的字节数、字数或是列数
    • grep 内容 文本
      • -n 可以看到位于第几行
      • -w 精确查找
      • -f 在文件中查找
      • -v 反选
      • -o 只抽离输出匹配的部分(不受行的限制)
      • grep '^#' 文本 在文本中找以#开头的行
      • -B指定输出包括匹配到的前多少行,比如-B1就是前一行;-A指定输出包括匹配到的后多少行,比如-A2就是包括了后两行。-C指定输出包括匹配到的前后多少行。
      • Ctrl + c停止当前命令的运行,输错命令时很有用(另外还有Ctrl + s/q
    • cut 显示行中的指定部分
      • cut -f 1-3 查看1-3列
      • cut f1 f2 > f3 把文件f1和2的内容合并起来放入f3
      • cut -f 1-3 test.bed |awk '{print $1}'
      • cut -d"\t" 规定分隔符
      • 查看特定染色体特定位置序列的网页工具链接
    • uniq -c 统计,一般要先sort
    • sort -k1,1 -r -n
    • sed
      • sed既支持在命令行中用单引号输入执行命令,也支持执行含有sed命令的文件
      • m,+n表示从m行开始向下n行,m~n表示从m行开始的每n行;指定行号提取:sed ‐n '2~2 p' test.txt输出偶数行,sed ‐n '1~2 p' test.txt输出奇数行内容
      • 根据关键词进行文本筛选 sed ‐n '/hello/ p' test.txt只会打印出包含hello的行;sed ‐n '/hello/, /world/ p' test.txt 打印两者之间的所有行。
      • 特殊情况下也可以将文本过滤和行号结合使用,sed ‐n '/hello/,+5 p' test.txt打印第一次出现hello的下面5行
      • -n:禁止显示所有输入内容,只显示经过sed处理的行(常用)
      • -e:直接在命令列模式上进行sed的动作编辑,接要执行的一个或者多个命令
      • -f:执行含有sed动作的文件
      • -rsed的动作支持的扩展正则(默认基础正则)
      • -i:直接修改读取的文件内容,不输出。
      • 命令
        • p 复制:复制模式空间中的内容,如果不和-n参数连用,每一行都会在屏幕输出两次,一行正常输出一行复制,结合-n参数后就可以打印需要的内容。
        • d 删除
        • i 插入:有的时候一个结果文件没有header,使用sed可以轻松完成。在匹配位置之前插入内容。sed '1i name\tlength\foldchange' test.txt
        • a 追加:和插入命令的区别在于在匹配位置后一行插入内容,如果想在末尾插入一行信息时将$作为地址。sed '$a auther:zhaofei' test.txt
        • c 行替换
        • y 字符转换:sed中的y命令可以实现映射的字符替换 [address]y/inchars/outchars/
        • l 输出隐藏字符 类似与cat -A,但是显示隐藏字符形式不同。
        • w 写入新文件
          • sed -n -e '/a/ w a.txt' -e '1,10 w b.txt' test.txt
          • sed '1,10d;w new.txt' test.txt
        • r 读取文件
        • e 执行外部命令 sed 'e echo "hello"' test.txt
        • ! 反向执行 sed '/hello/!d' test.txtsed -n '/hello/p' test.txt效果一致
        • n 匹配行下移一行操作 提前读取当前行的下一行内容,并且覆盖当前模式空间中的行
        • = 打印行号
        • s 替换 通用写法:[address1[,address2]]s/pattern/replacement/[flags]
          • flags包括n(替换第n个匹配项),g(全局替换),p(输出改变的行,结合-n),i(忽略大小写匹配),w(保存改变的行到新文件)。
          • 如果要替换的的内容包括了/,第一种方式是使用\/进行转义,第二种方法是使用@``|``!``^作为分隔符。
          • sed 's/\t/\n/g'/tr '\t' '\n'
    • paste
      • -s 把多行文件变成一行,默认以空格分隔,可以再-d 字符把分隔符变成这个字符
    • bc 计算算式的值,只输bc进入可计算浮点数的计算器模式
      • 例一:var1=$(echo "scale=4; 3.44/5" | bc)
      • 例二:
    #!/bin/bash
    
    var1=10.46
    var2=43.67
    var3=33.2
    var4=71
    
    var5=$(bc <<EOF
    scale=4
    a1 = ( $var1 * $var2)
    b1 = ( $var3 * $var4)
    a1 + b1
    EOF
    )
    echo The final answer for this mess is $var5
    
    • 搜索以>>开头的行:awk '/^>>/{print $0}'
    • join合并文件:join -1 <file_1_field> -2 <file_2_field> <file_1> <file_2>
    • awk
      • NR表示行号,NF表示列号,OFS表示输出分隔符等
    • cat runinfo.csv |xargs -i echo wget -c {} \$ >>sra.sh

    最后,向大家隆重推荐生信技能树的一系列干货!

    1. 生信技能树全球公益巡讲:https://mp.weixin.qq.com/s/E9ykuIbc-2Ja9HOY0bn_6g
    2. B站公益74小时生信工程师教学视频合辑https://mp.weixin.qq.com/s/IyFK7l_WBAiUgqQi8O7Hxw
    3. 招学徒https://mp.weixin.qq.com/s/KgbilzXnFjbKKunuw7NVfw

    相关文章

      网友评论

          本文标题:文本处理

          本文链接:https://www.haomeiwen.com/subject/luhlnqtx.html