GNU Awk
에 시도를 게시하고 테스트 한 적이 있습니다.
#!/bin/bash
for file in *.log
do
awk -F'=[[:blank:]]*' '/Number of/{printf "%s%s",$2,(NR%2?" ":RS)}' "$file" | awk 'function abs(v) {return v < 0 ? -v : v} {print abs($1-$2)}' >> output_"$file"
done
내가 두에 AWK
로직을 분리하는 이유는 하나의 거대한 명령에 그 일에 복잡성을 줄일 수 있었다. 첫 번째 부분은 로그 파일에서 열 형식으로 숫자를 추출하고 둘째는 절대 값을 얻기위한 것입니다.
나는 브레이크 다운됩니다 AWK
논리를 : -
-F'=[[:blank:]]*'
는 [[:blank:]]
공백 문자의 =
하나 이상의 인스턴스를 포함 mult0 자 분리 논리이다.
'/Number of/{printf "%s%s",$2,(NR%2?" ":RS)}'
은 Number of
으로 시작하는 줄을 검색하고 샘플 파일에서 9 13
과 같이 기둥 형식으로 인쇄합니다.
두 번째 부분은 자체 설명입니다. 필자는 두 반환 값에서 절대 값을 가져 와서 인쇄하는 함수를 작성했습니다.
- 각 출력은 더 처리하기 위해
output_
파일에 저장됩니다.
명령 줄에서 bash script.sh
으로 스크립트를 실행하십시오. 여기서 script.sh
은 위의 행을 포함하는 이름입니다.
는 업데이트 : -
은 너무 즉 절대 기능이없는 음의 값에 관심이 있다면 경우에,이 두 라인의
awk -F'=[[:blank:]]*' '/Number of/{printf "%s%s",$2,(NR%2?" ":RS)}' "$file" | awk '{print ($1-$2)}' >> output_"$file"
하나 개의 인스턴스에
awk
문을 변경 전체에 존재하는 파일? – Inian@Amir 지금까지 해보신 것은 무엇입니까? 이는 상대적으로 간단한 'awk'문제입니다. 아무 것도 시도하지 않고 묻지 말고 몇 가지 문서 또는 온라인 자습서를 살펴보십시오. – VM17
시작하려면 awk -F = '/^Number/{print $ 2}'file'을 실행하면 빼기를 원하는 값을 얻을 수 있습니다. 그런 다음 변수를 저장하고 빼기를 수행하거나 awk 자체에서 차이를 만들 수 있습니다. 그런 다음 출력 파일로 리디렉션됩니다. – VM17