내 파일은 다음과 같습니다.
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