데이터가 포함된 txt/log 파일이 있습니다. cat sample.log/(.txt)
500,3,2
실행 중인 스크립트는 Sample.log의 값을 덮어씁니다. 새 행을 덮어쓰거나 생성하는 대신 해당 행에 데이터를 추가하고 싶습니다.
예:
Sample.log -500,3,1
Script out- 600,4,3
최종 출력은 다음 위치에 저장되어야 합니다.sample.log
1100,7,4
스크립트가 실행될 때마다 해당 값이 계속 추가됩니다.
이 결과를 얻을 수 있도록 도와주세요.
답변1
다음은 스크립트를 호출 script.sh
하고 기존 전체 파일을 호출하는 GNU awk를 사용하여 이를 수행하는 한 가지 방법입니다 /tmp/sample.log
.
script.sh|\
cat /tmp/sample.log -|\
awk -F, '{for (f=1;f<=NF;f++) TOT[f]+=$f} END {for (f=1;f<length(TOT);f++) printf TOT[f]","; print TOT[length(TOT)]}' >/tmp/sample1.log
mv -f /tmp/sample1.log /tmp/sample.log
의 출력을 script.sh
기존 출력과 결합(1행으로 배치) sample.log
한 다음 두 행을 추가 awk
하고 그 결과를 교체에 사용합니다.sample.log
이는 필드 수에 관계없이 작동합니다(일관적일 필요는 없음). 구분 기호는 쉼표로 설정되어 있지만 쉽게 변경할 수 있습니다.
답변2
다음 단계를 시도했습니다.
sh script >scriptout
cat sample.log scriptout|awk -F "," 'BEGIN{sum=0;kum=0;jum=0} OFS =","{sum=sum+$1}{kum=kum+$2}{jum=jum+$3}END{print sum,kum,jum}' > final_out
mv final_out sample.log