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