파일의 문자열로 폴더를 만드는 방법은 무엇입니까?

파일의 문자열로 폴더를 만드는 방법은 무엇입니까?

일부 변환을 수행하는 스크립트가 있습니다. 결과를 특정 폴더에 저장하려면 스크립트가 읽고 거기에서 문자열을 가져오는 파일(csv 파일)이 있습니다(현재 echo/sed/awk를 사용하여 이 작업을 수행합니다).

이것이 내가 시도하는 방법입니다.

# creating output directory
PNAME=$( echo -n "$(sed '4q;d' ${FOLDER}/SampleSheet.csv| sed  -e 's/Experiment Name,//')")
echo $PNAME

mkdir /fs/pool/pool-bcfngs/fastq_files/${PNAME}/

문제는 이 명령을 사용할 때 항상 폴더 이름에 \r을 추가하고 하위 폴더를 자동으로 생성할 수 없다는 것입니다.

예를 들어 내가 찾고 싶은 문자열은 다음과 같습니다.

 sed '4q;d' 171213_NB500982_0018_AHH7CNAFXX/SampleSheet.csv
 Experiment Name,P030

내가 얻는 결과는

P030^M

그러나 새로운 행이 삽입됩니다. 변수에 P030을 추가하지 않고 P030 항목을 추출하는 방법이 있습니까?

답변1

\r캐리지 리턴 문자는 Windows 스타일 CRLF 줄 끝에 나타나는 C 표기법입니다. Unix의 일반적인 텍스트 처리 도구는 이를 일반 문자로 처리합니다.

따라서 seds의 관점에서 문제의 줄은 다음과 같습니다(내가 착각하지 않은 경우).

Experiment Name,P030\r

tr -d '\r'dos2unix, 또는 를 통해 파일을 실행하여 sed -e 's/\r$//'각 줄에서 CR을 제거할 수 있습니다. 또는 결과 문자열도 마찬가지입니다. 또는 원하는 문자열을 얻는 sed 표현식을 변경하여 처리하세요. 이는 라인의 다른 후행 쓰레기에도 적용됩니다.

예를 들어, 고정 라벨 뒤의 영숫자 문자를 제외하고 줄에서 모든 내용이 제거됩니다.

| sed -e 's/.*Experiment Name,\([[:alnum:]]*\).*/\1/'

( \(..\)일치하는 문자열의 일부를 저장("캡처")하고 \1첫 번째 그룹을 참조하는 데 사용됩니다.)

관련 정보