한 열의 최대값을 모두 출력하려고 합니다.
그래서 입력은 다음과 같습니다
John. Marketing. 5000.
Marcus. Manager. 9500.
Jason. SW 9500.
Cindy. Developer. 6000.
내가 원하는 출력은
name: Marcus, sal: 9500.
name: Jason, sal: 9500
지금까지 내 코드는
BEGIN {a=0}
{
if ($3> a)
max=$3;
output=$1
}
END{
print "name: ", output, "sal:", max
}
답변1
파일을 두 번 구문 분석해야 하며, 먼저 최대값을 찾은 다음 해당 줄을 인쇄해야 합니다. 예를 들어( max
양수라고 가정):
파싱.awk
NR == FNR && $3 > max { max = $3 }
NR != FNR && $3 == max
다음과 같이 실행하세요:
awk -f paste.awk infile{,}
{ print "name:", $1, "sal:", $3 }
형식을 변경 하려면 마지막 줄에 추가하세요 parse.awk
. 출력은 다음과 같습니다.
name: Marcus. sal: 9500.
name: Jason. sal: 9500.
답변2
awk 스크립트를 사용하면 다음을 수행할 수 있습니다.
tst.awk
!max || $3 > max {max=$3; delete array}
$3 == max {array[$0]="name:" OFS $1 OFS "sal:" OFS $3}
END{
for(key in array){
print array[key]
}
}
그게 다야 :
- 존재하지 않거나 설정된 것
max
보다 작으면$3
배열을 삭제합니다.max
$3
array
- 같으면 출력을 배열에 저장합니다
$3
.max
END
스크립트 끝에서array
인쇄된 각 키 에 대해
값 목록이 max
너무 크지 않은 경우 이 스크립트를 사용할 수 있습니다. 그렇지 않으면@토르의 답변더 나은 해결책이 될 수도 있습니다.