cron 작업을 실행 중이고 iostat -d 1 2
.비어 있지 않은 줄의 마지막 세트각 그룹의 길이를 알 수 없는 경우 표준 입력에서 표준 출력으로?
불량/작동하지 않는 솔루션:
tail
왜냐하면 여전히 마지막 그룹의 행 수를 계산해야 하기 때문입니다.iostat -d 1 2 | tail -$(echo "$(iostat -d 1 2 | wc -l) / 2" | bc)
동일한 컬렉션 크기에 따라 다릅니다.split
/csplit
파일로 출력하고 데이터의 쓸모없는 부분을 유지하기 때문입니다.iostat -d 1 2 | sed '1,/^$/d' | sed '1,/^$/d'
비어 있지 않은 세 번째 줄 세트를 가져오고 후행 줄 바꿈도 포함하므로 이 특별한 경우에만 작동합니다.iostat -d 1 2 | tac | sed '1,/^$/d' | sed '/^$/q'
약간 더 나은 방법은 첫 번째 세트를 뒤집어서 인쇄하는 것입니다. 그러나iostat
마지막 출력은 빈 줄이므로 먼저 제거한 다음 역방향 출력에서 다음 빈 줄까지 인쇄합니다. 다른 명령은 끝에 여러 줄 바꿈을 출력할 수 있으므로 이는 일반적인 해결 방법이 아닙니다. 원래 순서를 유지하려면 다시 역순으로 진행하세요.grep -P
\Z
EOF가 아닌 EOL만 감지하는 것 같습니다 .
답변1
사용할 수 있는 단락 모드 awk
입니다(RS가 빈 문자열인 경우). 이렇게 하면 각 "세트"가 레코드가 되어 마지막 레코드를 쉽게 인쇄할 수 있습니다.
iostat -d 1 2 | awk -vRS= 'END{print}'
답변2
perl -00
한 번에 한 단락씩 읽는 좋은 방법이므로 마지막 단락은 다음과 같습니다.
perl -00 -ne '$para = $_; END {print $para}'
답변3
그리고 sed
:
sed '/^$/{$!{N;/\n$/D;s/.//;$!h;$p;d};};//!{H;1h;$!d};$x' infile
이렇게 하면 선행/후행 빈 줄 없이 비어 있지 않은 마지막 줄 세트가 인쇄됩니다.
예를 들어
iostat -d 1 2 | sed '/^$/{ # if the line is empty
$!{ # and if it's not the last line
N # then pull in the next line
/\n$/D # if also empty, delete up to \n, restart cycle
s/.// # otherwise delete leading \newline
$!h # copy over hold space if not last line
$p # or print pattern space if last line
d # then delete pattern space
}
}
//!{ # if the line isn't empty
H # append it to hold space
1h # if it's the first line, overwrite hold space
$!d # if it's not the last line, delete it
}
$x # on the last line, exchange buffers
'