file-
xyz.161209:/userlogs/logs/reports 355G 195G 150G 57% /home
xyz.161209:/userlogs/logs/reports 355G 197G 148G 58% /home
xyz.161209:/userlogs/logs/reports 355G 201G 145G 59% /home
xyz.161210:/userlogs/logs/reports 355G 218G 129G 63% /home
xyz.161210:/userlogs/logs/reports 355G 223G 124G 65% /home
xyz.161210:/userlogs/logs/reports 355G 226G 121G 66% /home
xyz.161211:/userlogs/logs/reports 355G 210G 136G 61% /home
xyz.161211:/userlogs/logs/reports 355G 220G 127G 64% /home
xyz.161211:/userlogs/logs/reports 355G 173G 171G 51% /home
Result
xyz.161209:/userlogs/logs/reports 355G 201G 145G 59% /home
xyz.161210:/userlogs/logs/reports 355G 226G 121G 66% /home
xyz.161211:/userlogs/logs/reports 355G 220G 127G 64% /home
정렬된 날짜가 포함된 각 첫 번째 열에 대해 첫 번째 열을 기준으로 그룹화하고 백분율이 가장 높은 다섯 번째 열이 포함된 행만 표시합니다.
다음은 내가 시도한 내용이지만 원하는 결과를 얻을 수 없습니다. 누구든지 나를 도와줄 수 있나요?
awk -F, '{if ((a[substr($1,5,6)] == substr($1,5,6)) && (b[substr($5,1,2)] < substr($5,1,2)))b[substr($5,1,2)]=substr($5,1,2);}END{for(i in a){print i,a[i];}}' test.txt
답변1
이것이 제가 생각해낸 것입니다. 이것이 가장 효율적인 방법이라고 생각하고 더 효율적인 것을 보고 싶습니다. 그러나 작업이 완료됩니다.
sort test.txt | awk -F':' '{print $1}' | uniq > unique.txt
while read p; do
grep $p test.txt | sort -r -k5 | head -1
done < unique.txt
rm unique.txt
설명하다:
sort test.txt | awk -F':' '{print $1}' | uniq > unique.txt
목록에서 모든 고유 파일 이름을 추출합니다.
grep $p test.txt | sort -r -k5 | head -1
5번째 필드(% 값 포함)를 기준으로 내림차순으로 정렬하고 첫 번째 행만 인쇄합니다.
답변2
이것은 나에게 효과적입니다 ksh
.
sort -nrk5 -t ' ' test.txt | sort -t '.' -unk2
이 테스트 파일이 주어지면:
otherfile_.161209:/userlogs/logs/reports 000G 000G 000G 55% /home somefile_.161209:/userlogs/logs/reports 000G 000G 000G 45% /home file71.161209:/userlogs/logs/reports 000G 000G 000G 71% /home file_longer_12.161209:/userlog/log/report000G 000G 000G78%/집 qwerty_.161210:/userlogs/logs/reports 000G 000G 000G 31% /home xyz.161210:/userlogs/logs/reports 000G 000G 000G 34% /home abcdef.161210:/userlogs/logs/reports 000G 000G 000G85%/집 hellojoe_.161210:/userlogs/logs/reports 000G 000G 000G 45% /home kitchen_.161211:/userlogs/logs/reports 000G 000G 000G 39% /home room.161211:/userlogs/logs/reports 000G 000G 000G95%/집 Rooftop_77.161211:/userlogs/logs/reports 000G 000G 000G 12% /home f.161211:/userlogs/logs/reports 000G 000G 000G 30% /home
결과는 다음과 같습니다.
file_longer_12.161209:/userlog/log/report000G 000G 000G78%/집 abcdef.161210:/userlogs/logs/reports 000G 000G 000G85%/집 room.161211:/userlogs/logs/reports 000G 000G 000G95%/집
따라서 다음 파일 이름을 허용합니다.
- 길이가 다양해
- 숫자가 포함되어 있습니다.
분해:
sort -nrk5 -t ' '
: 처음에는 5열에 백분율로 정렬되어 있습니다.sort -t '.' -unk2
:첫 번째 필드에서만 날짜 문자열을 계산하여 고유한 결과를 인쇄합니다(.
구분 기호 사용).
답변3
이거 어때요?
awk -F"[.: ]" '{if($(NF-1)+0>Arr[$2]+0){Arr[$2]=$(NF-1)+0;Res[$2]=$0}}END{for (i in Res){print Res[i]}}' file
xyz.161210:/userlogs/logs/reports 355G 226G 121G 66% /home
xyz.161211:/userlogs/logs/reports 355G 220G 127G 64% /home
xyz.161209:/userlogs/logs/reports 355G 201G 145G 59% /home
awk -F"[.: ]" '{
if($(NF-1)+0>Arr[$2]+0)
{
Arr[$2]=$(NF-1)+0;
Res[$2]=$0
}
}
END{
for (i in Res)
{
print Res[i]
}
}' file