01.fasta, 02.fasta 등 다양한 샘플의 fasta 파일이 있습니다.
여기에는 모두 다음 패턴의 OTU 목록이 포함되어 있습니다.
>OTU1
CCTACGGGCGGCTGCAGT
>OTU2
CCTACGGGTGGCTGCAG
다음 >OTU*
을 수신하기 위해 fasta 파일의 각 줄 에 파일 이름(예: 01, 02 등)을 추가하고 싶습니다 >OTU1_01
.>OTU2_01
폴더의 모든 파일에 대해 자동으로 이 작업을 수행하는 스크립트를 작성하는 데 도움을 줄 수 있습니까?
답변1
모든 파일 변경을 시작하기 전에 파일을 백업했는지 확인하세요.
다음과 같은 명령을 실행할 수 있습니다.
for i in *.fasta; do nr="${i%.fasta}"; sed -i 's/^>OTU\(.*\)$/>OTU\1_'$nr'/' "$i"; done
sed
-i
(제자리에서 편집)을 지원하는 버전이 있는 경우 .
이 nr="${i%.fasta}"
부분은 파일 이름에서 번호를 가져옵니다. \(.*\)
다음 번호를 일치시켜 >OTU
다시 삽입하세요.\1
답변2
gawk
4.1.0부터 내부 편집 옵션을 사용할 수 있습니다. 그래서 한 번에 들이닥쳤지
awk -i inplace -v INPLACE_SUFFIX=.bak '
BEGINFILE{x=FILENAME; sub(/\..*/, "", x)};
/^>OT/{$0 =$0"_"x};
{print}' *.fasta
필요에 따라 파일이 내부에서 업데이트됩니다. 원본 파일에 접미사를 -v INPLACE_SUFFIX=.bak
붙여 백업합니다..bak