파일 내용을 명령의 일부로 병합하는 bash 스크립트

파일 내용을 명령의 일부로 병합하는 bash 스크립트

나는 bash 스크립트라고 부를 수 있는 것을 구성하려고 노력하고 있습니다(내 bash 스크립트 능력이 자랑할 만한 것은 아닙니다). 내가 원하는 것은 텍스트 파일(내용이 주기적으로 변경되는 텍스트 파일)의 한 줄을 내가 호출하는 프로그램(imagemagick)에 공급하는 것입니다. 지금까지는 작동하지만 텍스트 파일에 단 하나의 단어나 일련의 숫자만 있는 경우에만 가능합니다. 루프를 사용하려고 하는데 for루프로 인해 공백이 개행 문자로 처리되기 때문이라고 생각합니다. 따라서 프로그램에 텍스트 한 줄로 제공되는 대신 파일 내용이 일련의 단어나 숫자를 초과하면 한 번에 한 줄씩 제공되는 것처럼 보이며 거의 단어에 불과한 마지막 줄만 제공되는 것처럼 보입니다. 결국 결과에 병합됩니다. 내가 원하는 것이 아닙니다.

설명하고 이해하는 것이 더 쉬울 것이라고 생각하기 때문에 echo를 사용하여 예를 들겠습니다. 이라는 텍스트 파일이 있습니다 myfile.txt. 이 파일에는 여러 단어와 숫자 시퀀스가 ​​포함된 줄이 포함되어 있습니다. 다음과 같이 보일 수 있습니다:

'Sep 09, 2016 - 01:00 PM EDT\nconditions: mostly cloudy\n34 F\nHumidity: 39%'

작은 따옴표는 내가 이 자료를 제공하는 프로그램이 그것을 전체적으로 처리하고 공백을 무시하도록 해야 합니다. \n 비트는 내가 입력하는 프로그램에 필요하며 줄 바꿈 표시기 역할을 합니다. 따라서 for루프 및 에코 명령과 함께 이 예제를 아래와 같이 사용하세요.

for i in `cat myfile.txt`; do echo $i; done

출력을 생성하지 않습니다

'Sep 09, 2016 - 01:00 PM EDT\nconditions: mostly cloudy\n34 F\nHumidity: 39%'

하지만

'Sep
09,
2016
-
01:00
PM
EDT\nconditions:
mostly
cloudy\n34
F\nHumidity:
39%'

내가 읽은 바에 따르면 cat을 호출하는 루프를 사용하는 것은 내가 원하는 것을 달성하는 좋은 방법이 아닌 것 같습니다. 그리고 루프는 내용이 모두 함께가 아닌 여러 줄에 걸쳐 퍼지게 되는 이유일 가능성이 높습니다. . 그렇다면 이 모든 단어와 정수 그룹이 같은 줄에 위치하도록 이를 수행하는 방법을 제안할 수 있는 사람이 있습니까?

추신: 제가 만들려는 스크립트는 #!/bin/bash일련의 명령으로 시작하고 구성됩니다. 대부분의 콘텐츠가 제거되고 이름이 변경된 텍스트 파일을 다운로드합니다 myfile.txt. 그런 다음 날씨 지도를 다운로드하고 이에 대한 일부 작업(주로 자르기)을 수행합니다. 아이디어는 imagemagick을 사용하여 일부 텍스트를 해당 지도/이미지에 병치시키는 것입니다. 사실, 여러 단어나 공백으로 구분된 정수 시퀀스를 포함하려고 하지 않는 한 이미 작동합니다. 텍스트 파일에 단일 단어 또는 정수 시퀀스 이상이 있는 경우 마지막 단어 또는 정수 시퀀스만 이미지에 연결됩니다.

답변1

Imagemagick을 사용하여 일부 텍스트를 렌더링하려고 하는 것 같습니다. 그렇다면 왜 말하지 않겠습니까?

convert -background lightblue -fill blue -font Helvetica -size 160x  label:"$(<input.txt)" output.gif

input.txt렌더링하려는 파일은 어디에 있습니까?

답변2

while read -r things; do
  printf "%s\n" "$things"
done <myfile.txt

글을 쓰고 있는 것을 발견하면 for i in $( cat ...중단하고 a로 변경한 while read -r i후 거기에 데이터를 입력하세요 done. 단지 루프를 위해 전체 파일의 내용을 읽을 이유가 없으며 경우에 따라(빅 데이터) 이로 인해 많은 문제가 발생할 수 있습니다.

백슬래시가 올바르게 처리되도록 -r플래그 를 지정합니다 .readread

나도 printf대신 사용하고 있습니다 echo. 왜죠?이봐.

나는 또한 내 변수를 인용했습니다. 왜?이봐.

관련 정보