【linux编程】指定列提取cut命令详解

1.cut -bn

以字节(byte)为分割单位

-b list 打印出list中指定位置字节,制表符和空格符均为一个字节;

-n 对于多字节字符不进行分割,主要针对汉字(一个汉字三个字节)等多字节字符;

2.cut -c

以字符(character)为分割单位

-c list 打印出list中指定位置字符,对于单字节字符同-b选项,对于多字节字符有区别;

3.cut -df

以域(fileld)为分割单位

-f list 打印出list中指定位置域,默认以制表符作为分隔符;

-d byte 指定分隔符;

$cat fa.txt
sample  A   B   C   D   E   F   G   H   padj
ID1 1   2   3   4   5   6   7   8   0.2
ID2 1   2   3   4   5   6   7   8   0.03
ID3 1   2   3   4   5   6   7   8   0.02

$cut -b 2 fa.txt
a
D
D
D

$cut -c 1 fa.txt
s
I
I
I



$cut -b 1-5 fa.txt
sampl
ID1 1
ID2 1
ID3 1



替换第一个空格

sed 's/ /_/' mat

替换所有空格

sed 's/ /_/g' mat

将空格替换为空格

echo seq 1 10 | sed 's/ /,/g'

指定第二行,将数字替换为空格

sed '2,$ s/_[0-9]//g' mat

替换第一个空格

sed 's/ /_/1' mat

替换第二个空格

sed 's/ /_/2' mat

替换第二个及以后的空格

sed 's/ /_/2g' mat

打印序列,打印行号

$seq 20 25 |sed =
1
20
2
21
3
22
4
23
5
24
6
25

同时缓冲两行,但只对第一行行首操作

$seq 20 25 |sed =|sed 'N;s/^/>/'
>1
20
>2
21
>3
22
>4
23
>5
24
>6
25

将换行符替换为指标符号

$seq 20 25 |sed =|sed 'N;s/\n/\t/'
1   20
2   21
3   22
4   23
5   24

指定第二列按数字排序

sort -e -k2,2n

插入标题行

$seq 20 25 |sed =|sed 'N;s/\n/\t/'|sed '1 i ID\t\mum'
ID  mum
1   20
2   21
3   22
4   23
5   24
6   25

打印第二行

sed -n '2p' file.txt

打印第二行,第五行,至最后一行

sed -n '2~4p'

打印第二行,到第四行

sed -n '2,4p'

提取符合特定模式的行

$sed -n '/>/p' input.fa

>ENSMUST00000000001
>ENSMUST00000000003
>ENSMUST00000000010

去除文件中的空行

空行就是只有行首和行尾的行
sed '/^$/d' file.txt

原位删除整行

sed -i '/^$/d' mat

-i 参数的使用

原位删除的意思是,屏幕不输出

删除指定范围行

$sed '1,2d' fa.txt
ID3 1   2   3   4   5   6   7   8

记忆匹配

()启动记忆匹配;\1为第一个匹配项,\2为第二个匹配项;匹配项的计数根据左括号出现的位置来定,第一个(包括起来的为\1。

$echo "hah ehbio hah"
hah ehbio hah

$echo "hah ehbio hah"|sed 's/\(.*\)/\t\1\t\1\t/'
    hah ehbio hah   hah ehbio hah   

奇数偶数行合并

$echo -e "odd\neven\nodd\neven"
odd
even
odd
even

$echo -e "odd\neven\nodd\neven"|sed 'N;s/\n/\t/'
odd even
odd even

取出偶数行,比较简单

注意 n (小写)撇掉了奇数行

$echo -e "odd\neven\nodd\neven"|sed -n 'n;p'
even
even

取出奇数行

先都读进去,然后替换偶数行为空值,再输出

$echo -e "odd\neven\nodd\neven"|sed -n 'N;s/\n.*//p'
odd
odd

Windows/Linux换行符困境

Windows下的换行符是\r\n, Linux下换行符是\n, MAC下换行符是\r。所以Windows下的文件拷贝到Linux后,常会出现行尾多一个^M符号的情况,从而引起匹配或其它解析问题。

^M的输是 ctrl+v+M ctrl+v;ctrl+m,不是简单的输入^,再输入M。

ct@ehbio:~/SXBD$ cat -A windows.txt 
ID^M$
A^M$
B^M$
C^M$
ct@ehbio:~/SXBD$ sed 's/^M//' windows.txt | cat -A
ID$
A$
B$
C$


你可能感兴趣的:(【linux编程】指定列提取cut命令详解)