쉘 스크립트의 루프 용 - CSV 파일에서 브레이크 라인 추가
-
05-07-2019 - |
문제
나는 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))
끝과 시작이 정수 인 경우, 한 번만 사용하려면 변수에 물건을 넣을 필요가 없습니다.
그렇다면 ~ 아니다 원하는 것을 수행하고 문제를 편집하여 문제를 설명하십시오 (문제가있는 것과 오히려 무엇을하고 싶은지).
제휴하지 않습니다 StackOverflow