저는 Linux를 처음 접했습니다. 자동화가 끝나면 생성된 요약 파일을 구문 분석해야 합니다. 요약 파일은 다음과 같습니다.
Total_Test_Cases_Count:25
Total_Pass:24
Total_Fail:1
Execution_Duration:5m 7sec
Pass_Percentage:96.11%
Failure_Percentage:3.89%
이 값이 변수에 개별적으로 존재하여 다른 함수에 전달할 수 있기를 원합니다.
내 예상 결과:
Total_Test_Cases_Count(as a variable) with value 25.
Total_Pass(as a variable) with value 24.
다른 사람들에게도 마찬가지입니다.
내가 지금까지 시도한 것 :
awk "NR==1" summary.txt
이것은 만든다
TotalCount:25
답변1
이는 연관 배열을 사용하는 것이 가장 좋습니다. 예를 들어
declare -A array
while IFS=: read key val; do
array["$key"]="$val"
done < input.txt
for key in Total_Test_Cases_Count Total_Pass; do
printf '%s=%s\n' "$key" "${array[$key]}"
done
산출:
Total_Test_Cases_Count=25
Total_Pass=24
값에 필드 구분 기호(콜론, )가 포함되어 있으면 :
이 작업이 실패합니다 . 이 경우 먼저 입력의 필드 구분 기호를 두 필드 모두에 존재하지 않는 구분 기호로 변경해야 합니다. 일반적으로 탭이 좋은 선택입니다. 예를 들어:
while IFS=$'\t' read key val; do
array["$key"]="$val"
done < <(sed -e 's/:/\t/1' input.txt)
IFS는 탭 문자를 구분 기호로 사용하도록 설정되어 있으며 이 sed
명령은 첫 번째(첫 번째만) 콜론 문자를 탭 문자로 변경합니다.
답변2
awk 및 eval을 사용하십시오.
eval "$(awk -F: '{ print $1 "='\''" $2 "'\''" }' tmp)"
summary.txt를 구문 분석하는 내부 명령입니다 $()
. 이 옵션을 사용하면 awk에게 필드 구분 기호 -F
로 사용하도록 지시합니다 . :
각 줄의 형식은 다음과 같습니다.
Total_Pass='24'
나는해야만했다작은따옴표를 이스케이프하세요;그래서 코드가 보기 흉해 보입니다.
eval은 스크립트에서 작성하는 것처럼 서식이 지정된 텍스트를 수행하는 데 사용됩니다. 짐작할 수 있는 것은 이것이다.위험한입력 데이터를 완전히 제어할 수 없는 경우. 바라보다Bash에서 eval을 피해야 하는 이유는 무엇이며 대신 무엇을 사용해야 합니까?어쩌면 누군가가 이를 수행하는 더 안전한 방법을 지적할 수 있습니다.
그런 다음 다음과 같이 새 변수를 사용할 수 있습니다.
printf "Total_Pass with value %s\n" "$Total_Pass"