텍스트 파일에서 bash 스크립트로 데이터 가져오기

텍스트 파일에서 bash 스크립트로 데이터 가져오기

다음과 같은 텍스트 파일을 가져와야 합니다.

AMBI
CBNK
CCXI
CERE
CLACW
CNYD
DAEG
DLIA
DLLR
DNDN
DSGX
HAST
HIBB,
HPOL
IRDMZ
MARK
NEPT
NFEC
NINE
NRCIB
OMER
PLCC
PLPM
PSUN
UNTK

25개의 항목이 있으며 이를 bash 스크립트에 전달해야 합니다.

각 기호에 대해 한 번씩 프로그램을 실행하고 싶습니다. 이 기호는 나스닥 주식 기호입니다. 스크립트에 인용문을 포함시키려고 합니다.

이 명령을 수동으로 실행할 수 있었습니다.

sh stock (symbol) > /home/user/Desktop/stockquote.txt

수동 입력(기호)을 사용하려면 이를 자동화하는 스크립트가 필요합니다.

답변1

각 줄을 기호로 처리해 보셨나요?

25개 항목을 stocks.txt라는 파일에 넣습니다. 그런 다음 다음 스크립트를 사용하여 주식 파일의 각 줄을 반복하고 동일한 스크립트에 선언된 주식 함수를 사용하여 코드를 처리합니다.

while read symbol ; do 
  stock $symbol >> /home/user/Desktop/stockquote.txt 
done < stocks.txt

답변2

분명히 질문의 제목과 본문이 나에게 동일하지 않은 것 같습니다. 여기에는 두 가지 해결책이 있습니다.

외부 파일의 데이터를 Bash 스크립트로 가져옵니다.

파일을 읽고 해당 내용을 배열의 항목으로 저장합니다. (노트: 텍스트 파일의 내용을 고려하여 작동합니다. 예를 들어, 파일의 행에 따옴표가 없는 단어가 두 개 이상 있으면 그렇게 구성된 배열이 예상대로 작동하지 않습니다. )

declare -a symbols=($(cat input_file.txt | tr '\n' ' '))

symbols이제 다음과 같이 배열의 항목을 반복합니다.

LOG_FILE=/home/user/Desktop/stockquote.txt    

for symbol in ${symbols[@]}  
do  
    # echo "Processing $symbol ..."  
    sh stock "$symbol" >> "$LOG_FILE"    
done

실제로 Stock이라는 스크립트에 이를 포함할 수 있습니다. 위의 내용을 다음과 같이 변경 하세요 sh stock "$symbol".

f_process "$symbol" >> "$LOG_FILE"    

그 중에는 f_process기호를 처리하는 함수가 있을 수 있습니다. 함수를 작성하고 싶지 않다면 관련 코드 줄을 거기에 넣으면 됩니다.

외부 파일의 데이터를 매개변수로 쉘 스크립트에 전달합니다.

관련 솔루션에 의해 출판 된뉴울프 33. 방금 수정하여 재현했습니다.

LOG_FILE=/home/user/Desktop/stockquote.txt 
while read symbol    
do  
    stock "$symbol" >> "$LOG_FILE"
done < input_file.txt

답변3

파일의 줄을 반복하려면 read다음과 같이 루프에 내장 함수를 사용할 수 있습니다.

while IFS= read -r line; do
  echo "$line"
done <input_file.txt

줄의 내용은 변수에 저장됩니다 line(다른 이름을 선택할 수 있음). 바라보다IFS에 대해 알아보기더 많은 설명을 원하시면. 그렇지 않은 경우 IFS=선행 또는 후행 공백이 제거되며 이는 귀하의 경우에 이상적일 수 있습니다.

출력 파일 은 >stockquote.txt매번 잘립니다. 전체 명령에 넣거나 >>stockquote.txt파일에 추가하는 데 사용하십시오. 를 사용하는 경우 >>스크립트가 시작될 때 파일이 비어 있지 않을 수 있다는 점에 유의하세요.

이 코드 조각은 각 줄에 대해 프로그램을 실행 하고 각 기호 사이의 빈 줄( 인수 없음) stock에 출력을 저장합니다 .stockquote.txtecho

while read -r line; do
  stock "$line"
  echo
done <input_file.txt >stockquote.txt

실행 가능한지 확인하세요 stock. 쉘 스크립트인 경우 다음으로 끝나야 합니다.#!/bin/sh. search path 명령에 없으면 $PATH경로를 명시적으로 지정합니다(예: ./stock현재 디렉터리에 있는 경우).

을 사용할 수도 있지만 xargs입력 구문이 특별하다는 점에 유의하세요. 줄 바꿈을 구분 기호로 사용하지 않고 공백을 사용하며 이를 \'"따옴표 문자로 처리합니다(기본 입력 구문 사용 - 상황을 더욱 악화시키기 위해 xargs에는 대체 입력이 있음) 명령줄 옵션에 따라 달라지는 구문). 귀하의 사용 사례에서는 이것이 적절하고 더 짧을 수도 있지만 기호에 공백이나 따옴표 문자를 포함하거나 주석 줄을 건너뛰는 등의 기회를 잃게 됩니다.

xargs -n 1 stock <input_file.txt >stockquote.txt

관련 정보