텍스트 파일에서 위도와 경도를 가져 왔습니다. 이 두 텍스트 파일에는 수천 개의 숫자가 포함되어 있습니다. 나는 그것들을 변수로 읽어 들였고, 이제이 파일에 얼마나 많은 숫자가 있는지 알고 싶습니다. 나는이 질문을 사용했다 : 변수의 길이를 확인 하지만 어떤 이유로 내가 얻는 출력은 length of Lat is 1
.
#!/bin/sh
mapfile Latitude < final_ADCP_Saved.matLatitude.txt
mapfile Longitude < final_ADCP_Saved.matLongitude.txt
echo "length of Lat is ${#Latitude[@]}"
echo "length of Lon is ${#Longitude[@]}"
내가 말할 경우 echo "$Longitude
출력은
3.4269394e+00 3.4240913e+00 3.4212670e+00 3.4184430e+00 3.4156012e+00 3.4126834e+00 3.4097271e+00 3.4069235e+00 3.4041572e+00 3.4010903e+00 3.3982218e+00 3.3953517e+00 3.3925018e+00 3.3897342e+00 3.3868243e+00 3.3839234e+00 3.3810560e+00
이 변수의 길이를 어떻게 결정합니까?
값 사이에 줄 바꿈이 없습니다. 따라서 다음을 통해 구분 기호를 지정해야합니다 -d
.
mapfile -d ' ' Latitude < final_ADCP_Saved.matLatitude.txt
mapfile -d ' ' Longitude < final_ADCP_Saved.matLongitude.txt
이제 각 위도 / 경도를 자체 배열 요소에 올바르게 배치해야합니다.
편집 :이 -d
옵션은 현대적인 bashism 인 것 같습니다. 이것을 고치는 또 다른 방법은 tr
공백을 개행 문자로 변환하는 데 사용 하는 것 같습니다 (그리고 -s
중복을 짜내는 데 사용 ).
tr -s ' ' '\n' < final_ADCP_Saved.matLatitude.txt | mapfile Latitude
안타깝게도 파이프 라인이 mapfile
서브 쉘에서 실행되므로 메인 쉘에서 변수를 사용할 수 없기 때문에 작동하지 않습니다 .
해결 방법은 먼저 셸의 표준 입력을 프로세스 대체로 변경 한 다음 다음을 실행하는 것입니다 mapfile
.
#!/bin/bash
exec < <(tr -s ' ' '\n' < final_ADCP_Saved.matLatitude.txt)
mapfile Latitude
exec < <(tr -s ' ' '\n' < final_ADCP_Saved.matLongitude.txt)
mapfile Longitude
echo "length of Lat is ${#Latitude[@]}"
echo "length of Lon is ${#Longitude[@]}"
#!/bin/bash
bash에서만 작동 하므로 첫 번째 줄을 로 변경했습니다 .
EDIT2
이제 생각해 보겠습니다. exec
부품을 별도로 수행 할 필요가 없습니다.
#!/bin/bash
mapfile Latitude < <(tr -s ' ' '\n' < final_ADCP_Saved.matLatitude.txt)
mapfile Longitude < <(tr -s ' ' '\n' < final_ADCP_Saved.matLongitude.txt)
echo "length of Lat is ${#Latitude[@]}"
echo "length of Lon is ${#Longitude[@]}"
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다