echo "Start 2A25.20090401.64809.7.HDF 6420 6751"
echo "dimensions 9249 49"
echo "New Cell"
grep "6621,38" out.2A25.20090401.64809.7.HDF.txt.text = 36.58 7.52 77.82 210
grep "6623,41" out.2A25.20090401.64809.7.HDF.txt.text = 28.62 7.59 77.96 210
grep "6624,40" out.2A25.20090401.64809.7.HDF.txt.text = 33.74 7.52 77.96 210
grep "6624,41" out.2A25.20090401.64809.7.HDF.txt.text = 42.25 7.56 77.99 210
grep "6625,41" out.2A25.20090401.64809.7.HDF.txt.text = 30.58 7.54 78.02 210
grep "6627,40" out.2A25.20090401.64809.7.HDF.txt.text = 34.5 7.46 78.05 200
grep "6628,39" out.2A25.20090401.64809.7.HDF.txt.text = 35.57 7.40 78.05 200
grep "6628,40" out.2A25.20090401.64809.7.HDF.txt.text = 44.82 7.44 78.08 200
grep "6628,41" out.2A25.20090401.64809.7.HDF.txt.text = 21.35 7.47 78.11 210
grep "6629,40" out.2A25.20090401.64809.7.HDF.txt.text = 26.67 7.41 78.11 210
grep "6630,41" out.2A25.20090401.64809.7.HDF.txt.text = 28.12 7.43 78.17 210
grep "6631,40" out.2A25.20090401.64809.7.HDF.txt.text = 21.4 7.37 78.17 272
grep "6631,41" out.2A25.20090401.64809.7.HDF.txt.text = 47.3 7.41 78.20 200
grep "6631,42" out.2A25.20090401.64809.7.HDF.txt.text = 27.42 7.45 78.22 210
grep "6632,41" out.2A25.20090401.64809.7.HDF.txt.text = 39.42 7.39 78.23 200
grep "6632,42" out.2A25.20090401.64809.7.HDF.txt.text = 26.53 7.42 78.25 210
grep "6632,43" out.2A25.20090401.64809.7.HDF.txt.text = 27.72 7.46 78.28 210
grep "6632,44" out.2A25.20090401.64809.7.HDF.txt.text = 41.01 7.50 78.31 210
grep "6631,44" out.2A25.20090401.64809.7.HDF.txt.text = 34.26 7.52 78.28 210
grep "6632,45" out.2A25.20090401.64809.7.HDF.txt.text = 23.02 7.54 78.33 210
grep "6633,41" out.2A25.20090401.64809.7.HDF.txt.text = 32.5 7.36 78.26 272
grep "6633,42" out.2A25.20090401.64809.7.HDF.txt.text = 32.82 7.40 78.28 210
grep "6633,43" out.2A25.20090401.64809.7.HDF.txt.text = 39.28 7.44 78.31 210
grep "6634,41" out.2A25.20090401.64809.7.HDF.txt.text = 26.09 7.34 78.29 272
grep "6634,42" out.2A25.20090401.64809.7.HDF.txt.text = 41.54 7.38 78.31 210
grep "6634,43" out.2A25.20090401.64809.7.HDF.txt.text = 42.26 7.42 78.34 210
grep "6635,42" out.2A25.20090401.64809.7.HDF.txt.text = 31.53 7.36 78.34 210
grep "6635,43" out.2A25.20090401.64809.7.HDF.txt.text = 34.19 7.40 78.37 210
grep "6636,43" out.2A25.20090401.64809.7.HDF.txt.text = 29.9 7.37 78.40 292
echo "New Cell"
grep "6622,14" out.2A25.20090401.64809.7.HDF.txt.text = 22.24 6.61 77.22 291
grep "6622,15" out.2A25.20090401.64809.7.HDF.txt.text = 29.63 6.65 77.25 291
grep "6623,15" out.2A25.20090401.64809.7.HDF.txt.text = 30.63 6.63 77.28 291
echo "New Cell"
grep "6630,45" out.2A25.20090401.64809.7.HDF.txt.text = 31.44 7.59 78.27 292
echo "New Cell"
grep "6646,47" out.2A25.20090401.64809.7.HDF.txt.text = 27.52 7.31 78.81 210
grep "6647,47" out.2A25.20090401.64809.7.HDF.txt.text = 38.67 7.29 78.84 210
grep "6648,47" out.2A25.20090401.64809.7.HDF.txt.text = 37.08 7.27 78.87 210
echo "New Cell"
내 텍스트 파일은 위와 같습니다. Column5는 내가 관심 있는 값입니다. 위에 게시된 마지막 줄의 값은 37.08입니다.
적어도 하나의 값이 35보다 큰 그룹(echo "New Cell"로 구분)만 유지하고 싶습니다.
나는 시도했다:
awk '$5>=35 || /New Cell/ || /Start/ || /dimen/ || /Done/ || /End/' \
CWoSpix.apr2009.sh*
그러나 다섯 번째 열 값이 <35인 모든 행을 삭제합니다.
예상되는 출력은 다음과 같습니다.
echo "Start 2A25.20090401.64809.7.HDF 6420 6751"
echo "dimensions 9249 49"
echo "New Cell"
grep "6621,38" out.2A25.20090401.64809.7.HDF.txt.text = 36.58 7.52 77.82 210
grep "6623,41" out.2A25.20090401.64809.7.HDF.txt.text = 28.62 7.59 77.96 210
grep "6624,40" out.2A25.20090401.64809.7.HDF.txt.text = 33.74 7.52 77.96 210
grep "6624,41" out.2A25.20090401.64809.7.HDF.txt.text = 42.25 7.56 77.99 210
grep "6625,41" out.2A25.20090401.64809.7.HDF.txt.text = 30.58 7.54 78.02 210
grep "6627,40" out.2A25.20090401.64809.7.HDF.txt.text = 34.5 7.46 78.05 200
grep "6628,39" out.2A25.20090401.64809.7.HDF.txt.text = 35.57 7.40 78.05 200
grep "6628,40" out.2A25.20090401.64809.7.HDF.txt.text = 44.82 7.44 78.08 200
grep "6628,41" out.2A25.20090401.64809.7.HDF.txt.text = 21.35 7.47 78.11 210
grep "6629,40" out.2A25.20090401.64809.7.HDF.txt.text = 26.67 7.41 78.11 210
grep "6630,41" out.2A25.20090401.64809.7.HDF.txt.text = 28.12 7.43 78.17 210
grep "6631,40" out.2A25.20090401.64809.7.HDF.txt.text = 21.4 7.37 78.17 272
grep "6631,41" out.2A25.20090401.64809.7.HDF.txt.text = 47.3 7.41 78.20 200
grep "6631,42" out.2A25.20090401.64809.7.HDF.txt.text = 27.42 7.45 78.22 210
grep "6632,41" out.2A25.20090401.64809.7.HDF.txt.text = 39.42 7.39 78.23 200
grep "6632,42" out.2A25.20090401.64809.7.HDF.txt.text = 26.53 7.42 78.25 210
grep "6632,43" out.2A25.20090401.64809.7.HDF.txt.text = 27.72 7.46 78.28 210
grep "6632,44" out.2A25.20090401.64809.7.HDF.txt.text = 41.01 7.50 78.31 210
grep "6631,44" out.2A25.20090401.64809.7.HDF.txt.text = 34.26 7.52 78.28 210
grep "6632,45" out.2A25.20090401.64809.7.HDF.txt.text = 23.02 7.54 78.33 210
grep "6633,41" out.2A25.20090401.64809.7.HDF.txt.text = 32.5 7.36 78.26 272
grep "6633,42" out.2A25.20090401.64809.7.HDF.txt.text = 32.82 7.40 78.28 210
grep "6633,43" out.2A25.20090401.64809.7.HDF.txt.text = 39.28 7.44 78.31 210
grep "6634,41" out.2A25.20090401.64809.7.HDF.txt.text = 26.09 7.34 78.29 272
grep "6634,42" out.2A25.20090401.64809.7.HDF.txt.text = 41.54 7.38 78.31 210
grep "6634,43" out.2A25.20090401.64809.7.HDF.txt.text = 42.26 7.42 78.34 210
grep "6635,42" out.2A25.20090401.64809.7.HDF.txt.text = 31.53 7.36 78.34 210
grep "6635,43" out.2A25.20090401.64809.7.HDF.txt.text = 34.19 7.40 78.37 210
grep "6636,43" out.2A25.20090401.64809.7.HDF.txt.text = 29.9 7.37 78.40 292
echo "New Cell"
echo "New Cell"
grep "6630,45" out.2A25.20090401.64809.7.HDF.txt.text = 31.44 7.59 78.27 292
echo "New Cell"
grep "6646,47" out.2A25.20090401.64809.7.HDF.txt.text = 27.52 7.31 78.81 210
grep "6647,47" out.2A25.20090401.64809.7.HDF.txt.text = 38.67 7.29 78.84 210
grep "6648,47" out.2A25.20090401.64809.7.HDF.txt.text = 37.08 7.27 78.87 210
echo "New Cell"
awk를 사용하여 원하는 출력을 얻으려면 어떻게 해야 합니까?
답변1
Awk
해결책:
awk '/Start|End|Done|dimen/{ print }
/echo "New Cell"/{
if (f) {
if (max >= 35) {
for (i=1; i<=c; i++) print a[i];
print
}
delete a; c=max=0
}
f=1
}f{ a[++c]=$0; if ($5 > max) max=$5 }' file
세부 사항:
/Start|End|Done|dimen/{ print }
Start
- 또는End
또는Done
또는 하위 문자열을 포함하는 줄을 있는 그대로 인쇄합니다 .dimen
/echo "New Cell"/{ ... }
- 패턴화된 라인을 만날 때echo "New Cell"
:if (f) { ... }
- 첫 번째 모드 라인이 아니고 이전에 해당 부품을 이미 처리한 경우:if (max >= 35)
- 가장 최근 부분의 5번째 필드 값 중 가장 큰 값이 다음과 같거나 큰 경우35
:for (i=1; i<=c; i++) print a[i]
- 가장 최근 섹션의 모든 라인을 인쇄합니다(c
배열의 마지막 인덱스이며a
배열 길이를 나타냄).
delete a
- 배열 지우기a
(배열의 모든 항목 제거a
)c=max=0
-주요 변수 재설정
f=1
- 활성화된 표시와 처리할 활성 부분(한 묶음)을 나타냅니다.
f{ ... }
- 처리 중인 활성 부분에서:a[++c]=$0
$0
- 섹션의 모든 레코드/행을 배열로 캡처합니다a
. 배열은 연속된 숫자를 사용하여 인덱싱됩니다.++c
if ($5 > max) max=$5
- 처리된 레코드 집합에서max
다섯 번째 필드 값의 최대값을 결정합니다.$5
산출:
echo "Start 2A25.20090401.64809.7.HDF 6420 6751"
echo "dimensions 9249 49"
echo "New Cell"
grep "6621,38" out.2A25.20090401.64809.7.HDF.txt.text = 36.58 7.52 77.82 210
grep "6623,41" out.2A25.20090401.64809.7.HDF.txt.text = 28.62 7.59 77.96 210
grep "6624,40" out.2A25.20090401.64809.7.HDF.txt.text = 33.74 7.52 77.96 210
grep "6624,41" out.2A25.20090401.64809.7.HDF.txt.text = 42.25 7.56 77.99 210
grep "6625,41" out.2A25.20090401.64809.7.HDF.txt.text = 30.58 7.54 78.02 210
grep "6627,40" out.2A25.20090401.64809.7.HDF.txt.text = 34.5 7.46 78.05 200
grep "6628,39" out.2A25.20090401.64809.7.HDF.txt.text = 35.57 7.40 78.05 200
grep "6628,40" out.2A25.20090401.64809.7.HDF.txt.text = 44.82 7.44 78.08 200
grep "6628,41" out.2A25.20090401.64809.7.HDF.txt.text = 21.35 7.47 78.11 210
grep "6629,40" out.2A25.20090401.64809.7.HDF.txt.text = 26.67 7.41 78.11 210
grep "6630,41" out.2A25.20090401.64809.7.HDF.txt.text = 28.12 7.43 78.17 210
grep "6631,40" out.2A25.20090401.64809.7.HDF.txt.text = 21.4 7.37 78.17 272
grep "6631,41" out.2A25.20090401.64809.7.HDF.txt.text = 47.3 7.41 78.20 200
grep "6631,42" out.2A25.20090401.64809.7.HDF.txt.text = 27.42 7.45 78.22 210
grep "6632,41" out.2A25.20090401.64809.7.HDF.txt.text = 39.42 7.39 78.23 200
grep "6632,42" out.2A25.20090401.64809.7.HDF.txt.text = 26.53 7.42 78.25 210
grep "6632,43" out.2A25.20090401.64809.7.HDF.txt.text = 27.72 7.46 78.28 210
grep "6632,44" out.2A25.20090401.64809.7.HDF.txt.text = 41.01 7.50 78.31 210
grep "6631,44" out.2A25.20090401.64809.7.HDF.txt.text = 34.26 7.52 78.28 210
grep "6632,45" out.2A25.20090401.64809.7.HDF.txt.text = 23.02 7.54 78.33 210
grep "6633,41" out.2A25.20090401.64809.7.HDF.txt.text = 32.5 7.36 78.26 272
grep "6633,42" out.2A25.20090401.64809.7.HDF.txt.text = 32.82 7.40 78.28 210
grep "6633,43" out.2A25.20090401.64809.7.HDF.txt.text = 39.28 7.44 78.31 210
grep "6634,41" out.2A25.20090401.64809.7.HDF.txt.text = 26.09 7.34 78.29 272
grep "6634,42" out.2A25.20090401.64809.7.HDF.txt.text = 41.54 7.38 78.31 210
grep "6634,43" out.2A25.20090401.64809.7.HDF.txt.text = 42.26 7.42 78.34 210
grep "6635,42" out.2A25.20090401.64809.7.HDF.txt.text = 31.53 7.36 78.34 210
grep "6635,43" out.2A25.20090401.64809.7.HDF.txt.text = 34.19 7.40 78.37 210
grep "6636,43" out.2A25.20090401.64809.7.HDF.txt.text = 29.9 7.37 78.40 292
echo "New Cell"
echo "New Cell"
grep "6646,47" out.2A25.20090401.64809.7.HDF.txt.text = 27.52 7.31 78.81 210
grep "6647,47" out.2A25.20090401.64809.7.HDF.txt.text = 38.67 7.29 78.84 210
grep "6648,47" out.2A25.20090401.64809.7.HDF.txt.text = 37.08 7.27 78.87 210
echo "New Cell"