지정된 확장자를 가진 디렉터리의 각 파일에 대해 파일 이름의 하위 문자열만 사용하여 다른 파일에 추가하고 확장자는 다르지만 하위 문자열은 동일한 파일로 출력하고 싶습니다.
내가 하고 싶은 일과 유사한 몇 가지 예제를 찾았지만 bash 스크립트를 작성 중이어서 몇 가지 어려움이 있고 예제를 찾는 데 어려움을 겪고 있습니다.
예를 들어, filename.sample로 시작하고 하위 문자열 "filename"만 원합니다.
내가하려는 것은 다음과 같습니다.
for i in /path/to/*.sample
do
bar="${i%%.sample*}"
sed "s/^>\(.*\)/>\1;label=${bar##*/};/" "$i" > "$i"_bar \;
done
파일의 내용은 *.sample
다음과 같습니다.
*.sample
> MEWFJWRNFF_141
AB28974UJBDASX
원하는 출력은 다음과 같습니다.
Output_bar
> MEWFJWRNFF_141; label=filename;
AB28974UJBDASX
불분명한 점이 있으면 알려주세요! 감사합니다!
답변1
for i in /path/to/*.sample
do
str="; label=$(basename -s.sample $i);"
sed "/^>/ s/$/$str/" "$i"
done
basename
이 명령은 경로를 제외하고 파일 이름만 제공합니다.-s.sample
확장 프로그램을 제거 합니다- 따라서 이면
i
다음을 포함합니다/path/to/filename.sample
.str
; label=filename;
/^>/ s/$/$str/
로 시작하는 줄을 찾아>
변수의 내용을str
줄 끝에 추가합니다.
출력 파일의 이름을 어떻게 지정하려는지 이해할 수 없습니다. 그렇다면 주어질 것 입니다 i
./path/to/filename.sample
"$i"_bar
/path/to/filename.sample_bar