아래와 같이 텍스트 파일에 데이터가 있습니다.
server volume available total used percent-used percent-vol-space
--------------- -------------------- --------- ------- ----- ------------ ----------------------
TEMPSERVER TEMP_root 972.4MB 972.8MB 388KB 5% 5%
TEMPSERVER TEMPVOL01 2.59TB 5.13TB 2.55TB 54% 10%
TEMPSERVER TEMPVOL02 2.26TB 4.10TB 1.53TB 50% 10%
TEMPSERVER TEMPVOL02_Clone 2.26TB 4.10TB 1.57TB 50% 10%
TEMPSERVER TEMPVOL03 1.79TB 3.88TB 2.10TB 63% 20%
TEMPSERVER TEMPVOL03_Clone 2.26TB 4.10TB 1.79TB 50% 10%
TEMPSERVER TEMPVOL04 3.32TB 4.30TB 807.3GB 30% 10%
22 entries were displayed.
이제 열 6 또는 7의 값이 90%보다 큰 경우 모든 행을 인쇄하고 싶습니다. 어떻게 해야 하나요?
답변1
awk 'NR > 2 && (0+$6 > 90 || 0+$7 > 90)' <file
이는 데이터를 한 줄씩 읽고 한 줄의 필드 6 또는 7에 있는 숫자가 90보다 클 때마다 인쇄합니다. 처음 두 헤더 행을 건너뛰고 NR > 2
6열과 7열의 값에 0을 추가하여 %
90에 대해 테스트하기 전에 강제로 숫자로 변환합니다(따라서 데이터의 부호가 제거됨).
답변2
perl -lane 'print if $. <= 2 || grep { $_ > 90. } @F[5,6]' input-data.file
행은 공백으로 구분되며 필드는 @F
0부터 시작하는 인덱스 배열에 저장됩니다. 헤더(라인 1,2)는 무조건 인쇄되며 나머지는 필드 6 및/또는 7(최소 90% 사용 포함)을 찾는 필터를 기반으로 선택됩니다.