문제

나는 a를 사용하려고 노력하고있다 for 쉘 스크립트에서 루프.

텍스트 파일에서 명령을 실행 중입니다. 각 명령을 10 번 실행하고 일부 통계를 CSV 파일에 삽입하려고합니다. 그 명령이 완료된 후, 다음을 시작하고 싶지만 첫 번째 명령이 10 번 완료된 후 CSV 파일에 라인 브레이크를 넣습니다.

다음은 다음과 같습니다.

#Function processLine
processLine(){
line="$@"
for i in 1 2 3 4 5 6 7 8 9 10
do
START=$(date +%s.%N)
echo "$line"
eval $line > /dev/null 2>&1

END=$(date +%s.%N)
DIFF=$(echo "$END - $START" | bc)

echo "$line, $START, $END, $DIFF" >> file.csv 2>&1
echo "It took $DIFF seconds"
echo $line
done
}

도움을 주셔서 감사합니다

업데이트

루프를 올바르게 수행하고 있지만 각 명령이 10 번 실행 된 후에 라인 브레이크를 추가 할 수는 없습니다.

도움이 되었습니까?

해결책

processLine()
{
    line="$@"

    echo $line >> test_file
    for ((i = 1; i <= 10 ; i++))
    do
        # do not move to the next line
        echo -n "$i," >> test_file
    done

    # move to the next line: add the break
    echo >> test_file
}

echo -n > test_file

processLine 'ls'
processLine 'find . -name "*"'

다른 팁

줄을 추가하는 것은 어떻습니까 "echo >> file.csv" 후에 done? 아니면 10의 각 블록 사이에 빈 줄만 원하십니까? 그런 다음 다음을 수행 할 수 있습니다.

FIRST=1
processline()
{
  if (( FIRST )) then
    FIRST = 0
  else
    echo >> file.csv
  fi
  ...rest of code...
}

그렇지 않으면 원하는 출력과 지금 얻는 출력의 예를 제시하고 싶을 수도 있습니다.

합리적으로 보입니다. 원하는대로해야합니까?

예를 들어 몇 가지를 단순화 할 수 있습니다

DIFF=$(echo "$END - $START" | bc)

그냥 될 수 있습니다

DIFF=$((END - START))

끝과 시작이 정수 인 경우, 한 번만 사용하려면 변수에 물건을 넣을 필요가 없습니다.

그렇다면 ~ 아니다 원하는 것을 수행하고 문제를 편집하여 문제를 설명하십시오 (문제가있는 것과 오히려 무엇을하고 싶은지).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top