awk:パターンが見つからない場合は、ファイルの末尾にテキストを追加してください。

awk:パターンが見つからない場合は、ファイルの末尾にテキストを追加してください。

awkどうすれば下部にのみテキストを追加できますか?パターンが見つからない場合ファイルに?

これはうまくいきません:

awk '{if ($0 !~ /pattern/) {print}; END {print "someText"}}' file

ファイルは 1MB 未満に小さくなります。

答え1

もう1つのawk方法は、大容量ファイルを処理するより速く、一度だけ終了することです。模様次の場合は、ファイルに何かを見つけて追加してください。模様見つかりませんでした。

awk '/pattern/{found=1; exit}; END{ if(!found) print "append" >>FILENAME }' infile

または以下を使用してくださいgrep

<infile grep -q pattern || echo 'appending...' >>infile

答え2

次は動作します。

awk '/pattern/ {found=1} {print} END{if (!found) print "someText"}' file

その後、ファイル全体が先験的に({print}無条件のルール)印刷され、次にパターンが見つかります。見つかったらフラグを設定します({found=1}条件は/pattern/、と同じ$0 ~ /pattern/)。ファイルの最後にフラグが設定されていない場合は"someText"印刷されます。

次のように出力を新しいファイルにリダイレクトできます。

awk ' <see above> ' file > newfile

または、最新バージョンのGNUがある場合は、awk「現在の場所」編集機能を使用してください(注意してください)。

awk -i inplace ' <see above> ' file

関連情報