2016-09-14 1 views
0

bashの配列に問題があります。最後の要素までの変換配列の最初の要素から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[*]} 

OBS:

データ= [09/03/16 09/01/16 09/02/16 09/03/16 09/04/16 9月5日/ 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

room_minutes = 7339 8748 211 15 15927 7028 34 11112 12567 686 5 13988 11279 8465 4402 60 1 10380 8078 8422】予め

おかげ。

+0

ここで間違っている、非常にたくさんあります - '実際には配列を移入するために非常にバギーな方法である' FOO =($(バー))、で開始します。例えば、あなたの 'bar'がそれを取り囲む空白で' * 'を出すと、それはカレントディレクトリのファイル名のリストに置き換えられます。配列を読み込むために 'read -a'、' readarray'、 'mapfile'、または' BashFAQ#1 '(http://mywiki.wooledge.org/BashFAQ/001) 'read'ループを使用してください。 –

+0

第2に、 '$ {foo [*]}'は配列を展開するためのバグのある方法です。 '$ {foo [*]}'と同様に、glob展開を行いますが、文字列分割も行います。 $ {foo [@]} ''は、期待通りに2つの引数に展開されますが、 '$ {foo(@ *}}' [*]} 'は、' $ IFS'の値と現在のディレクトリにあるファイルの数に基づいて、予測できない数値に展開されます。 –

+0

第3に、あなたの期待された結果と実際の結果がどのように異なるかは、この質問からはっきりと分かりません。他の誰もが(Minutes.phpを必要とせずに)走って見ることができる、最小限で完全で検証可能な**例である[MCVE](http://stackoverflow.com/help/mcve)をビルドしてください実際の出力と予想される出力の両方を提供します。 –

答えて

0

convertroom_minutesを2列にしたいと思います。配列の代わりに複数行の文字列と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 ...) 'グロブ展開、改行文字以外の文字列分割などを避けるために –

+0

私は間違いを修正しました。 humm readarray -t dataを使用してみてください。 – Daniel