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