文本处理

首先得到示例文件

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

文件内容查看和处理

  • cat 全显示
  • hexdump 显示文件十六进制格式
    • 常用的大型数据文件一般存为ASCII码形式(像几大基因bank的数据文件),而我们自己认为创建的常为UTF-8,所以有时候认为处理文件需要会碰到把UTF-8编码的字符插入到ASCII码文件里去了。遇到这种问题,我们可以用hexdump -c命令查看出错的地方。
  • od 输出文件的八进制、十六进制等格式编码的字节
  • tail 在屏幕上显示指定文件的末尾若干行
  • head 在屏幕上显示指定文件的开头若干行
  • 取特定行可以head+tail
  • less 分屏上下翻页浏览文件内容
    • -S 严格按行显示
    • -N 加个行号
    • /往下搜索模式,?往上搜索模式,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 <
  • 搜索以>>开头的行:awk '/^>>/{print $0}'
  • join合并文件:join -1 -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

你可能感兴趣的:(文本处理)