bash는 스크립트의 논리를 수정 할 수 없습니다 :나는 다음과 같은 항목으로 (UserInputDetails 말) 테이블이
13_1_2_1,0,0,9,0,0,0,0,0,0,0
13_1_2_2,0,0,9,2,0,0,0,0,0,2
13_1_2_2_2,0,0,0,3,0,2,0,0,0,0
13_2_2_2,0,0,0,0,4,4,0,2,0,0
:
+------------+-----------+----------+
| screenId | userInput | numInput |
+------------+-----------+----------+
| 13_1_2_1 | 2 | 9 |
| 13_1_2_2 | 2 | 9 |
| 13_1_2_2 | 3 | 2 |
| 13_1_2_2 | 9 | 2 |
| 13_1_2_2_2 | 3 | 3 |
| 13_1_2_2_2 | 5 | 2 |
| 13_2_2_2 | 4 | 4 |
| 13_2_2_2 | 5 | 4 |
| 13_2_2_2 | 7 | 2 |
+------------+-----------+----------+
내가으로 예상되는 출력을 제공하는 쉘 스크립트를 작성해야을
출력 설명 :
첫 번째 입력 줄은 screenId '13_1_2_1'에 대한 특정 userInput의 numInputs를 나타냅니다. 이 라인은 먼저 screenId를 인쇄 한 다음 userInput 0-9에 해당하는 NumInput을 인쇄합니다. userInput '2'에 대한 numInput은 9이고 나머지 0-9는 0이므로 값은 13_1_2_1,0090000000
다음 함수에 대해 작성된 bash 스크립트는 다음과 같습니다.
#!/bin/bash
MYSQL="mysql -uroot -proot -N Database1"
yesterday=""
if [ $# -ge 1 ]
then
yesterday="$1"
else
yesterday=`$MYSQL -sBe "select date_sub(date(now()), interval 1 day);"`
fi
echo "DATE: $yesterday"
PREVSCREENID=''
SCREENID=
ABC=tempSqlDataFile
$MYSQL -sBe "select screenId, userInput, numInput from userInputDetails group by screenID, userInput" > $ABC
for i in {0..9}
do
arr[$i]='0'
done
while read line
do
SCREENID=`echo $line | awk '{ print $1 }'`
i=`echo $line | awk '{print $2 }'`
arr[$i]=`echo $line | awk '{print $3}'`
if [[ $SCREENID != $PREVSCREENID ]]
then
echo "$SCREENID ${arr[*]}" | tr ' ' ','
for i in {0..9}
do
arr[$i]='0'
done
else
i=`echo $line | awk '{print $2 + 1}'`
arr[$i]=`echo $line | awk '{print $3}'`
fi
PREVSCREENID=$SCREENID
done < $ABC
논리가 잘못되어 논리가 올바르지 않습니다. 위의 쉘 스크립트의 결과는 다음과 같습니다.
13_1_2_1,0,0,9,0,0,0,0,0,0,0,
13_1_2_2,0,0,9,0,0,0,0,0,0,0,
13_1_2_2_2,0,0,9,3,0,0,0,0,0,2,
13_2_2_2,0,0,0,3,4,2,0,0,0,0,
제 스크립트에서 논리를 수정하도록 도와주십시오. 또한 스크립팅과 프로그래밍을 처음 접했으므로이 작업을 수행하는 효율적인 방법이 아닐 수도 있습니다. 효율적인 방법이 있는지 제안하십시오.