文本处理
2019-04-27 本文已影响0人
大吉岭猹
首先得到示例文件
-
wget URL
从指定的URL下载文件
文件内容查看和处理
-
cat
全显示 -
hexdump
显示文件十六进制格式- 常用的大型数据文件一般存为ASCII码形式(像几大基因bank的数据文件),而我们自己认为创建的常为UTF-8,所以有时候认为处理文件需要会碰到把UTF-8编码的字符插入到ASCII码文件里去了。遇到这种问题,我们可以用
hexdump -c
命令查看出错的地方。
- 常用的大型数据文件一般存为ASCII码形式(像几大基因bank的数据文件),而我们自己认为创建的常为UTF-8,所以有时候认为处理文件需要会碰到把UTF-8编码的字符插入到ASCII码文件里去了。遇到这种问题,我们可以用
-
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
动作的文件 -
-r
:sed
的动作支持的扩展正则(默认基础正则) -
-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.txt
和sed -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