文本处理
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.txtsed '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