파일의 텍스트를 바꾸고 싶습니다.

파일의 텍스트를 바꾸고 싶습니다.

내 파일은 다음과 같습니다.

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

관련 정보