한 섹션에 "something"으로 시작하는 필드가 있는 샘플 데이터 세트가 있습니다. 특정 문자열 "1234"와 일치할 때 각 "무언가" 섹션의 모든 행을 가져오고 싶습니다.
나는 "1234"를 검색하고 "무언가"가 일치할 때까지 그 앞뒤의 모든 줄을 인쇄할 수 있다고 생각했습니다.
원하는 출력:
something like this one
1234
abcd
something like this one
zyxw
1234
예시 데이터세트:
otherthings
otherthings
otherthings
something like this one
1234
abcd
something not like this one
xxxx
yyyy
something not like this one
xxxx
yyyy
something like this one
1234
abcd
otherthings
otherthings
otherthings
답변1
"awk" 사용:
#!/bin/sh
awk '
function print_section() {
# Only print section if "1234" was encountered
if (valid == 1) print section;
}
{
if (/something/) {
# Start new section
section = $0;
}
else if (/^\s*$/) {
# Empty line -> output previous section
if (section ne "") {
print_section();
section = "";
valid = 0;
}
}
else if (section ne "") {
# Add line to section if one has been started
section = section "\n" $0;
if (/1234/) valid = 1;
}
}
END {
# End of file, print current section if it exists
print_section();
}
' file