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

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

저는 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는 배울 가치가 있습니다. 친절하게 대해주시면 친구가 될 거예요.

관련 정보