2016-09-14 2 views
0

bash의 배열에 문제가 있습니다. 나는 마지막 요소까지 convert 배열의 주먹 요소로부터 2 개의 배열을리스트에 반향시키고 싶다. room_minute 배열에 대해서도 마찬가지입니다.에코 2 배열 쉘 스크립트 목록

#! /bin/bash 
#! /usr/bin/perl 

declare -a data; 
declare -a convert; 
declare -a sala_minutos; 

data=($(./Minutes.php 2> /dev/null | grep -P -w -o [0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{2\} | awk -v FS=/ -v OFS=/ '{print $2,$1,$3}')); 

room_minutes=($(./Minutes.php 2> /dev/null | grep -oP '(?<=room:)[0-9]+')) 


for ((i=0; i< ${#data[*]}; i++)); 
do 
convert=($(date -d "${data[i]} 10:00:00" +%s)); 
done 

echo ${convert[*]} ${room_minutes[*]} 

것을 제외 어레이 내부 :

데이터 = 09/03/16 09/01/16 09/02/16 09/03/16 09/04/16 09/05/16 09/06/16 09/07/16 09/08/16 09/09/16 09/10/16 09/11/16 09/12/16 09/13/16 08/25/16 08/26/16 08/27/16 08/28/16 08/29/16 08/30/16 08/31/16]

비밀 = 1472698800 1472785200 1472871600 1472958000 1473044400 1473130800 1473217200 1473303600 1473390000 1473476400 1473562800 1473649200 1473735600 1472094000 1472180400 1472266800 1472353200 1472439600 1472526000 1472612400

01 23,516,

의 room_minutes = 11279 8465 4402 10380 8078 60 1 8422 34 11,112 12,567 13,988 7,339 686 5 8748 211 15 15927 7028] 미리

감사합니다.

+0

잘못 여기에 꽤 많이있다 -로 시작하는이'foo는 = ($ (바))'실제로 배열을 채울 수있는 매우 버그 방법입니다. 예를 들어,'bar'가 공백을 포함하는'*'을 출력하면, 그것은 현재 디렉토리의 파일 이름 목록으로 대체 될 것입니다. 배열을 채우기 위해'read -a','readarray','mapfile' 또는 [BashFAQ # 1] (http://mywiki.wooledge.org/BashFAQ/001)'while' 루프를 사용하십시오. –

+0

둘째로,'$ {foo [*]}'는 배열을 확장하는 방법으로 버그가 있습니다. '$ {foo [*]}'와 마찬가지로 glob 확장을 수행하지만 문자열 분할도 수행합니다. 따라서'foo = ("first * argument" "second * argument")',' "$ {foo [@]}"'('$ {foo [*]}'는'$ IFS'의 값과 현재 디렉토리에있는 파일의 수를 기반으로 예측할 수없는 숫자로 확장 될 것입니다. –

+0

셋째,이 질문을 통해 예상되는 결과와 실제 결과가 어떻게 다른지 명확하지 않습니다. 다른 사람들이 (Minutes.php가 필요없이) 실행할 수있는 [MCVE] (http://stackoverflow.com/help/mcve) - ** 최소한의 완전하고 검증 가능한 ** 예 -를 작성하십시오. 문제를 해결하고 실제 및 예상 출력을 제공하십시오. –

답변

0

두 열에 convertroom_minutes이 필요하다고 생각합니다. 배열 대신 다중 문자열과 paste을 사용하여이 작업을 가능한 한 조금 변경했습니다. data=room_minutes= 행은 바깥 쪽 ()을 제거하는 경우를 제외하고 변경되지 않습니다.

#!/bin/bash 

data=$(./Minutes.php 2> /dev/null | grep -P -w -o [0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{2\} | awk -v FS=/ -v OFS=/ '{print $2,$1,$3}'); 

room_minutes=$(./Minutes.php 2> /dev/null | grep -oP '(?<=room:)[0-9]+'); 

convert=$(echo "$data" | xargs -I{} date -d "{} 10:00:00" +%s) 

paste <(echo "$convert") <(echo "$room_minutes") 
0
#!/bin/bash 

data=($(./Minutes.php 2> /dev/null | grep -P -w -o [0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{2\} | awk -v FS=/ -v OFS=/ '{print $2,$1,$3}')); 

room_minutes=($(./Minutes.php 2> /dev/null | grep -oP '(?<=room:)[0-9]+')); 

for ((i=0; i< ${#data[@]}; i++)); 
do 
convert=($(date -d "${data[$i]} 10:00:00" +%s)); 
echo -e Room_Minutes ${convert[@]} ${room_minutes[$i]} 
done 
+0

Eh? 'data'는 배열이 아닙니다.'data = ($ (./ Minutes.php ...))'를 의미한다면, 그것은 너무 버그가 있습니다 - readarray -t data <<(./ Minutes.php ...)'glob 확장을 피하기 위해서, 개행 문자가 아닌 문자를 쪼개는 등 –

+0

고맙습니다. 이제 실수를했습니다! humm readarray -t data 사용 해보겠습니다. – Daniel