다음과 같은 파일에서:
(AJirio_TR15329|c4_g1_i4|m.30470:0.00230,(AJama_TR16613|c5_g2_i2|m.30203:0.00171,(AJkago_TR11651|c5_g2_i1|m.3847:0.00057,AJtok_TR11413|c7_g1_i1|m.3527:0.00033)1.00 :0.00080)0.94 :0.00085,Atab_TR15364|c0_g1_i1|m.4073:0.27697);
이 파일을 가져와야 합니다.
AJirio_TR15329|c4_g1_i4|m.30470"AJirio"
AJama_TR16613|c5_g2_i2|m.30203"AJama"
AJkago_TR11651|c5_g2_i1|m.3847"AJkago"
AJtok_TR11413|c7_g1_i1|m.3527"AJtok"
Atab_TR15364|c0_g1_i1|m.4073"Atab"
따라서 기본적으로 계통발생수에서 DNA 서열의 이름을 추출하고 여기에 종 이름을 따옴표(AJirio, AJkama..)로 추가합니다.
답변1
Awk
해결책:
awk -v RS=',' -F':' '{
sub(/^\(/, "", $1);
printf "%s\042%s\042\n", $1, substr($1, 1, index($1,"_")-1)
}' file
RS=','
-,
레코드 구분자로 처리됩니다.-F':'
-:
필드 구분자로 처리됩니다.sub(/^\(/, "", $1)
- 첫 번째 필드에서 선행 대괄호를 제거합니다.$1
\042
- 큰따옴표 문자에 대한 8진수 ASCII 코드"
substr($1, 1, index($1,"_")-1)
- 발췌종 이름첫 번째 필드로 시작(시작 위치부터 char1
의 첫 번째 발생까지_
)
산출:
AJirio_TR15329|c4_g1_i4|m.30470"AJirio"
AJama_TR16613|c5_g2_i2|m.30203"AJama"
AJkago_TR11651|c5_g2_i1|m.3847"AJkago"
AJtok_TR11413|c7_g1_i1|m.3527"AJtok"
Atab_TR15364|c0_g1_i1|m.4073"Atab"
답변2
이것은 당신이 원하는 것을 얻는 것 같습니다 :
입력 파일:
$ cat input
(AJirio_TR15329|c4_g1_i4|m.30470:0.00230,(AJama_TR16613|c5_g2_i2|m.30203:0.00171,(AJkago_TR11651|c5_g2_i1|m.3847:0.00057,AJtok_TR11413|c7_g1_i1|m.3527:0.00033)1.00 :0.00080)0.94 :0.00085,Atab_TR15364|c0_g1_i1|m.4073:0.27697);
입력을 출력으로 변환하는 스크립트입니다. 이 스크립트는 tr
쉼표를 줄 바꿈으로 변환한 다음 sed
모든 공백과 대괄호를 제거하고 :
한 줄에서 a 뒤의 모든 것을 제거하는 데 사용된 다음 해당 줄을 인쇄하는 데 사용되고 그 뒤에 따옴표가 오고 awk
첫 번째 앞에 텍스트 |
문자가 옵니다. 마지막은 sed
마지막 것 이후의 모든 것을 다듬고 _
뒤에 큰따옴표를 추가하는 데 사용됩니다.
$ cat script.sh
#!/bin/bash
input="${1}"
output="${2}"
cat "${input}" | tr ',' '\n' |
sed -e 's/ //g' -e 's/[()]//g' -e 's/:.*$//' |
awk -F'|' '{ print $0"\""$1 }' |
sed -e 's/_[^_][^_]*$/"/' > "${output}"
스크립트를 실행합니다:
$ bash script.sh input output
출력에 유의하세요.
$ cat output
AJirio_TR15329|c4_g1_i4|m.30470"AJirio"
AJama_TR16613|c5_g2_i2|m.30203"AJama"
AJkago_TR11651|c5_g2_i1|m.3847"AJkago"
AJtok_TR11413|c7_g1_i1|m.3527"AJtok"
Atab_TR15364|c0_g1_i1|m.4073"Atab"