我想替换文件中的文本

我想替换文件中的文本

我的文件如下所示:

NODE_13_length_50291_cov_8.067223 GTTGCCTAATATCGCCAATCCAGCTCCT
NODE_25_length_22118_cov_8.258986 TATCGCCAATCCAGCTCCT
NODE_36_length_15273_cov_5.283743 TGCCTAATATCGCCAATCCAG

我想将其更改为:

NODE_13 GTTGCCTAATATCGCCAATCCAGCTCCT
NODE_25 TATCGCCAATCCAGCTCCT
NODE_36 TGCCTAATATCGCCAATCCAG

如果可能的话,我还想制作一个日志文件,如下所示:

NODE_13_length_50291_cov_8.067223   NODE_13
NODE_25_length_22118_cov_8.258986   NODE_25
NODE_36_length_15273_cov_5.283743   NODE_36

哪个命令适用于此?

非常感谢。

答案1

对于第一部分,您可以尝试以下操作:

sed 's/_length.*[[:blank:]]\([ACGT]*\)$/ \1/' file

输出:

NODE_13 GTTGCCTAATATCGCCAATCCAGCTCCT
NODE_24 TATCGCCAATCCAGCTCCT
NODE_36 TGCCTAATATCGCCAATCCAG

对于第二部分:

sed 's/\(^NODE_[0-9]*\)\(_.*\) [ACGT]*$/\1\2 \1/'

输出:

NODE_13_length_50291_cov_8.067223 NODE_13
NODE_24_length_22118_cov_8.258986 NODE_24
NODE_36_length_15273_cov_5.283743 NODE_36

答案2

GNU 中的一行代码awk

awk -v sp="_length_" 'BEGIN {FS=" |"sp }
    {print $1, $3 > "output"; print $1sp$2, $1 > "log"}' file1

输出

cat output
NODE_13 GTTGCCTAATATCGCCAATCCAGCTCCT
NODE_25 TATCGCCAATCCAGCTCCT
NODE_36 TGCCTAATATCGCCAATCCAG

cat log
NODE_13_length_50291_cov_8.067223 NODE_13
NODE_25_length_22118_cov_8.258986 NODE_25
NODE_36_length_15273_cov_5.283743 NODE_36

答案3

第一的:

sed 's|_length.*[0-9]||g' file.txt

输出:

NODE_13 GTTGCCTAATATCGCCAATCCAGCTCCT
NODE_25 TATCGCCAATCCAGCTCCT
NODE_36 TGCCTAATATCGCCAATCCAG

第二:

awk '{print $1,substr ($1,1,7)}' log_file.txt

输出

NODE_13_length_50291_cov_8.067223 NODE_13
NODE_25_length_22118_cov_8.258986 NODE_25
NODE_36_length_15273_cov_5.283743 NODE_36

如果您想就地编辑文件:

sed -i 's|_length.*[0-9]||g' log_file.txt

awk -i inplace '{print $1,substr ($1,1,7)}' log_file.txt

要使用 执行此操作awk,您需要拥有 4.2 或更高版本。

答案4

尝试使用下面的命令并且工作正常

先出1

awk '{print substr($1,1,7),$NF}'  filename

output

NODE_13 GTTGCCTAATATCGCCAATCCAGCTCCT
NODE_25 TATCGCCAATCCAGCTCCT
NODE_36 TGCCTAATATCGCCAATCCAG

第二出局

awk '{print $1,substr($1,1,7)}' filename

输出

NODE_13_length_50291_cov_8.067223 NODE_13
NODE_25_length_22118_cov_8.258986 NODE_25
NODE_36_length_15273_cov_5.283743 NODE_36

蟒蛇方法

#!/usr/bin/python
k=open('q.txt','r')
for i in  k:
    j=i.split(' ')
    print j[0][0:7],j[1].strip()
print "\n"
q=open('q.txt','r')
for i in q:
    w=i.split(' ')
    print w[0],w[0][0:7]



output
First output1

NODE_13 GTTGCCTAATATCGCCAATCCAGCTCCT
NODE_25 TATCGCCAATCCAGCTCCT
NODE_36 TGCCTAATATCGCCAATCCAG


Second output

NODE_13_length_50291_cov_8.067223 NODE_13
NODE_25_length_22118_cov_8.258986 NODE_25
NODE_36_length_15273_cov_5.283743 NODE_36

相关内容