如何从配置文件中删除变量hadoop.tasklog.totalLogFileSize不等于 100
例子
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
在行尾,它会从输入中删除。