linux文本处理命令是一类对文件进行操作的命令,通过使用文本处理命令,可以轻松的对文件进行排序,拆分,合并等操作,熟练掌握文本处理命令,在生物信息文本处理中,有十分重要的意义。
01
cat 查看文件内容命令
以下为最常用的几个命令实例
命令 | 解释 |
---|---|
cat test.txt | 获取test.txt所有内容(全部获取) |
cat -n test.txt | 对输出的所有行编号 |
cat -b test.txt | 对非空输出行编号 |
cat –s test.txt | 去空行,但只能相邻空行,并且保留一个 |
cat > 1 | 快速创建文件1,直接输入内容,ctrl c保存并退出 |
注意事项:
遇到大文件的时候,不要直接cat,因为cat会一直把所有内容打印到屏幕上,造成长时间处于打印状态,如遇到这种情况,连续不间断的敲击ctrl c组合键退出打印状态
相关衍生命令:
cat还有两个常用的相关命令:
1.zcat 查看压缩文件
2.tac 从结尾往上看内容
二.sort 排序命令
对数据的某一列按照文本,数字等排序方法进行排序,也可以进行字符内排序,以下为最常用的几个命令实例
命令 | 解释 |
---|---|
sort A.txt | 默认按照-k 1 字符串排序 |
sort -k 2nr A.txt | 按照第二列数字降序 |
sort –k 2nr –k 3n A.txt | 按照第二列数字降序,第三列升序 |
sort -t $':’ | 域分隔符的使用(默认空格或者t) |
sort -k1.4 -n C.txt | 字符内排序 |
三.uniq 去除重复命令
对相同的行去重复,统计重复,保留重复等,还可指定某一列做为去重复关键字去重复,以下为最常用的几个命令实例
命令 | 解释 |
---|---|
cat x.txt | 显示内容 |
uniq –c x.txt | 去重复并且在前显示重复次数 |
uniq –d x.txt | 只显示重复 |
uniq –cd x.txt | 显示重复及重复次数 |
uniq –u x.txt | 显示不重复 |
uniq –f 1 test.txt | 忽略第一列进行去重复 |
注意事项:
uniq需要配合sort进行使用,把重复的内容排序到一起,以下为最常用的几个命令实例
命令 | 注释 |
---|---|
cat x.txt | 显示内容 |
uniq –c x.txt | 去重复并且在前显示重复次数 |
uniq –d x.txt | 只显示重复 |
uniq –cd x.txt | 显示重复及重复次数 |
uniq –u x.txt | 显示不重复 |
uniq –f 1 test.txt | 忽略第一列进行去重复 |
四.wc 统计命令
统计指定文件中的字节数、字数、行数,并将统计结果显示输出,以下为最常用的几个命令实例
命令 | 解释 |
---|---|
cat test.txt | 看看读取的内容 |
wc –l test.txt | 统计行数 |
wc –c test.txt | 统计字节数 |
wc –L test.txt | 打印最长行的长度 |
五.grep/egrep命令
grep为过滤命令,一般情况下支持基本正则表达式,可以通过参数-E支持扩展正则表达式,常用命令如下:
命令 | 解释 |
---|---|
grep '10' test.txt | 过滤含有10的行10的行 |
grep -n '10' test.txt | 打印包含10的行和行标10的行和行标 |
grep -c '10' test.txt | 统计包含10的行数10的行数 |
grep –i 'm' test.txt | 打印包含m和M的行m和M的行 |
grep -iv 'm' | 统计不包含m和M的行m和M的行 |
grep 'energywise' * | 在当前目录搜索带'energywise'行的文件'energywise'行的文件'energywise'行的文件'energywise'行的文件 |
grep -r 'energywise' * | 在当前目录及其子目录下搜索'energywise'行的文件'energywise'行的文件'energywise'行的文件'energywise'行的文件 |
grep一般情况下支持基本正则表达式,可以通过参数-E支持扩展正则表达式,另外grep单独提供了一个扩展命令叫做egrep用来支持扩展正则表达式,这条命令和grep -E等价。虽然一般情况下,基本正则表达式就够用了,以下为最常用的几个命令
元数据 | 意义 | 范例 |
---|---|---|
^ | 搜寻以word开头的行。 | grep –n ‘^#’ regular.txt #搜寻以#开头的脚本注释行 |
$ | 搜寻以word结束的行 | grep –n ‘.$’ regular.txt #搜寻以‘.’结束的行 |
. | 匹配任意一个字符 | grep –n ‘e.e’ regular.txt #匹配e和e之间有任意一个字符,可以匹配eee,eae,eve,但是不匹配ee。 |
转义字符。 | grep –n ‘.' regular.txt #过滤含有.的行 | |
* | 前面的字符重复0到多次 | grep –n ‘go*gle’ regular.txt #例如匹配gle,gogle,google,gooogle等等 |
[list] | 匹配一系列字符中的一个。 | grep –n ‘g[lf]’ regular.txt #例如:匹配gl,gf。 |
[n1-n2] | 匹配一个字符范围中的一个字符。 | grep –n ‘[0-9]’ regular.txt #例如:匹配数字字符 |
[^list] | 匹配字符集以外的字符 | grep –n ‘[^o]‘ regular.txt #匹配非o字符 |
{n1,n2} | 前面的字符重复n1,n2次 | grep –n ‘go{2,3}gle’ regular.txt #匹配google,gooogle。 |
<word | 单词是的开头。 | grep –n ‘<g’ regular.txt #匹配以g开头的单词 |
word> | 匹配单词结尾 | grep –n ‘tion>’ regular.txt #匹配以tion结尾的单词 |
六.sed命令
sed是一个强大的按行处理的命令,常用的命令如下:
命令 | 注释 |
---|---|
sed -n 'p' filename | //输出所有行,等同于cat afile |
sed -n '3p' filename | //输出第3行 |
sed -n '3l' filename | //输出第3行,其中非打印字符以ASCII码表示 |
sed -n '3,5p' filename | //输出第3~5行 |
sed -n 'p;n' filename | //输出所有的奇数行,n表示读入下一行文本 |
sed -n 'n;p' filename | //输出所有的偶数行,n表示读入下一行文本 |
sed -n '1,5{p;n}' filename | //输出第1~5行之间间的所有奇数行(第1、3、5行) |
sed -n '10,${n;p}' filename | //输出第10行至文件尾之间的所有偶数行 |
sed -n '/xml/p' filename | //输出包含xml的行 |
sed -n '4,/xml/p' filename | //输出从第4行至第一个包含xml的行 |
sed -n '/xml/=' afile filename | //输出包含xml的行所在的行号,=用来表示行号 |
sed -n '/^install/p' filename | //输出以install开头的行 |
sed -n '/noarch$/p' filename | //输出以noarch结尾的行 |
sed -n '$p' afile filename | //输出最后一行 |
sed -n '/bsystemb/p' filename | //输出包含独立单词system的行,b 用来界定单词 |
七.awk命令
是一个最强大的文本分析工具,以下列常用文本处理的写法:
命令 | 注释 |
---|---|
awk '{print $0}' filename | 打印全部 |
awk '{print $1}' filename | 打印第一列 |
awk '{print $NF}' filename | 打印最后一列 |
awk '/chr13/||/chr23/' filename | 过滤含有chr13或者chr23 |
awk '{if($2>20&&$3>30){print}}' filename | 过滤第二行大于20并且第三行大于30的行 |
awk -F ':' '{print $1}' file | 以:作为域分割符,打印第一列 |
八.cut命令
cut命令命令从文件的列剪切字节、字符、域,并将这些字节、字符,域,输出出来,下面为几个常见的用法:
命令 | 解释 |
---|---|
cut -b 3-5,8 | 提取第3-5 和第8个字节(bytes)。注意顺序不能写乱 |
cut –c 3-5,8 | 提取第3-5 和第8个字符(characters),注意与字节的区别。 |
cut -d ":" -f 2- B.txt | 按:分割域(fields) |
九.split命令
split命令可以按照行或者按照字节分割文件,以下列常用文本处理的写法:
命令 | 解释 |
---|---|
split –l 100 file.txt | 生成xaa,xab … |
split -a 3 -d -l 100 file.txt "file" | 生成file000,file001 … |
十.paste命令
Paste命令可按列合并命令,可以很轻松的将两个文件按列合并,下面是常见的举例:
命令 | 解释 |
---|---|
paste a.txt b.txt c.txt > all1.txt | 将文件a.txt,b.txt,c.txt 按照列合并(列之间为t) |
paste -d ':' a.txt b.txt c.txt > all2.txt | 将文件a.txt,b.txt,c.txt 按照列合并(列之间为:) |
十一.xargs
xargs用作替换工具,读取输入数据重新格式化后输出。Xargs命令常跟管道连用,处理管道中的数据流
命令 | 解释 |
---|---|
cat test.txt | xargs | 多行输入单行输出 |
cat test.txt | xargs -n3 | -n选项多行输出 |
echo "nameXnameXnameXname" | xargs -dX | -d选项可以自定义一个定界符 |
十二.comm
comm命令比较两个文件的相同和不同,下面为常用的命令举例:
命令 | 解释 |
---|---|
comm1.txt 2.txt | 比较两文件的不同,默认输出3列,第一列为1文件中独有的,第二列为2文件中独有的,第三列为两文件共同的 |
comm -12 1.txt 2.txt | 不显示1和2列,即显示两者共有的元素 |
comm -23 1.txt 2.txt | 不显示2和3列,即显示1中独有的 |
comm -13 1.txt 2.txt | 不显示2和3列,即显示1中独有的 |
comm -3 1.txt 2.txt |sed's/t//g' | 求两者并集 |
注意事项:两个比较的文件需要排序后进行
好了linux常用命令就介绍到这里,按照这些实例好好练习,加上自己的融会贯通,相信你很快就会成为快速文本处理的高手