구분 기호로 문자열을 분할하고 연결하는 문제

구분 기호로 문자열을 분할하고 연결하는 문제

저는 Linux 쉘 명령을 처음 접했습니다. "!Platform_series_id = GSE1145"라는 여러 줄이 포함된 텍스트 파일을 읽어야 합니다. '를 사용하기 위해 각 줄을 나누어야합니까?GSE1145'=' 기호 부분 뒤에 '가 표시됩니다. 마지막으로 '와 같은 링크를 생성하고 싶습니다.ftp://ftp.ncbi.nlm.nih.gov/geo/series/GSE5nnn/GSE1145/다시 채우다/GSE1145_RAW.tar' 링크의 굵은 부분은 txt 파일에서 가져옵니다. 나머지는 변경되지 않습니다. 이것은 이야기입니다.

내가 막히는 지점에 도달하면:

다음 코드를 실행할 때

while read p; do
  A="$(cut -d'=' -f2 <<<$p)"
  echo "ftp://ftp.ncbi.nlm.nih.gov/geo/series/GSE5nnn/$A/suppl/$A_RAW.tar"
done < a.txt

예상치 못한 결과가 나오네요

/suppl/.tarcbi.nlm.nih.gov/geo/series/GSE5nnn/ GSE1145 /suppl/.tarcbi.nlm.nih.gov/geo/series/GSE5nnn/ GSE1643

그런 다음 동일한 변수를 간단히 연결하려고 합니다.

while read p; do
  A="$(cut -d'=' -f2 <<<$p)"
  echo "$A$A"
done < a.txt

그러나 대답은 여전히 ​​내가 기대했던 것과 다릅니다. 작성된 대로 echo $A 처럼 동작합니다.

GSE1145 GSE1643

문제를 이해하기 위해 마침내 다음 코드를 시도했습니다.

A="$(cut -d'=' -f2 <<< '!Platform_series_id = GSE1145')"
echo $A$A

그것은 나에게 올바른 결과를 제공합니다

GSE1145 GSE1145

그럼 내가 읽을 때 무엇이 ​​문제인가?

그런데, 다음 코드를 시도하면 작동합니다! 그런데 왜? 나는 이것이 올바른 접근 방식이라고 생각하지 않습니다. $A 길이만큼 공백을 넣으면,

while read p; do
  A="$(cut -d'=' -f2 <<<$p)"
  echo "        $A$A"
done < a.txt

GSE1145 GSE1145 GSE1643 GSE1643

당신의 도움을 주셔서 감사합니다.

답변1

"=" 기호 뒤에 "GSE1145"를 사용하려면 각 줄을 나누어야 합니다.

사용하라는 신호입니다(1) 기본 아이디어는 자동으로 줄을 읽고 분할하여 원하는 것을 할 수 있도록 하는 것입니다. 링크를 awk로 인쇄하려면,

awk -F ' += +' \
    '{ printf "ftp://ftp.ncbi.nlm.nih.gov" \
              "/geo/series/GSE5nnn/%s/suppl/%s_RAW.tar", $2, $2 }' filename

이것은 인쇄됩니다무엇파일의 각 줄에 대해. awk를 사용하면 줄 번호나 정규식 일치로 처리할 줄을 선택할 수 있습니다.

awk는 배울 가치가 있습니다. 잘 대해주면 친구가 될 것입니다.

관련 정보