構成ファイルから変数を削除する方法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
これはファイルを=
-で区切られたフィールドとして扱います。行が指定されたパターンと一致し、次の数字=
(つまり、2番目のフィールド)が100以外の場合、その行はスキップされ、出力は生成されません。他のすべての行は、1
プログラムの最後の末尾の行によって出力されます(で置き換え可能{ print }
)。
使用sed
:
$ sed '/hadoop\.tasklog\.totalLogFileSize/{ /=100$/!d; }' file
hadoop.tasklog.totalLogFileSize=100
hadoop.tasklog.purgeLogSplits=true
hadoop.tasklog.logsRetainHours=12
これはすべてのラインを出力しますが、ラインが与えられたパターンと一致した場合に実行されます。いいえ一致する項目が行の=100
末尾にある場合、入力から削除されます。