구성 파일에서 변수를 제거하는 방법hadoop.tasklog.totalLogFileSize100과 같지 않음
예
more file.conf
hadoop.tasklog.totalLogFileSize=107
hadoop.tasklog.totalLogFileSize=10
hadoop.tasklog.totalLogFileSize=100
hadoop.tasklog.totalLogFileSize=189
hadoop.tasklog.totalLogFileSize=104
hadoop.tasklog.purgeLogSplits=true
hadoop.tasklog.logsRetainHours=12
.
.
예상 출력
more file.conf
hadoop.tasklog.totalLogFileSize=100
hadoop.tasklog.purgeLogSplits=true
hadoop.tasklog.logsRetainHours=12
.
.
답변1
$ awk -F= '/hadoop\.tasklog\.totalLogFileSize/ && $2 != 100 { next } 1' file
hadoop.tasklog.totalLogFileSize=100
hadoop.tasklog.purgeLogSplits=true
hadoop.tasklog.logsRetainHours=12
이는 파일을 =
-로 구분된 필드로 처리합니다. 행이 지정된 패턴과 일치하고 다음 숫자 =
(즉, 두 번째 필드)가 100이 아닌 경우 해당 행을 건너뛰고 출력이 생성되지 않습니다. 다른 모든 줄은 1
프로그램 끝의 후행 줄에 의해 출력됩니다( 로 대체 가능 { print }
).
사용 sed
:
$ sed '/hadoop\.tasklog\.totalLogFileSize/{ /=100$/!d; }' file
hadoop.tasklog.totalLogFileSize=100
hadoop.tasklog.purgeLogSplits=true
hadoop.tasklog.logsRetainHours=12
이것은 모든 라인을 출력하지만 라인이 주어진 패턴과 일치하면 실행됩니다.아니요일치하는 항목이 =100
줄 끝에 있으면 입력에서 제거됩니다.