awk を使用して一部のプログラム ファイルを処理し、デバッグ セクションを削除しています。これらのファイルの中には、末尾に改行がないものがあります。awk で改行を使用して行ごとにファイルを印刷したいのですが、改行が存在しない場合は最後に余分な改行を追加しません。
例えば
a
b // no newline after the "b"
これに変わりつつあります:
a
b<NEWLINE>
この改行を追加したくない理由はcmp --silent $file $file_without_debug_sections
、元のファイルと新しいファイルのどちらを使用するかを決定するために使用しようとしているからです。私がそれを気にする理由は、コンパイラ出力でデバッグ拡張子を持つファイルの数を制限しようとしているからです。異なる場合にのみ非デバッグ バージョンを使用すると、この「デバッグ セクションの削除」プロセスによってどのファイルが変更されたかが明確になります。
要約すると、awk でファイルを 1 行ずつ処理する方法を教えてください。
私の現在のコードは次のようになります。
{
if ($0 ~ /^[ \t]*\/\/[ \t]*\/\*[ \t]*begin[ \t]+debug[ \t]*$/) {
print "/* begin debug";
} else if ($0 ~ /^[ \t]*\/\/[ \t]*end[\ t]+debug[\t ]*\*\/[ \t]*$/) {
print "end debug */";
} else print;
}
print
最後に を に置き換えてみましたprintf "%s", $0
。ただし、代わりにすべての行から改行を省略します。