GNU/Linux >> Linux の 問題 >  >> Linux

awk を使用して変更を適所に保存する

GNU Awk 4.1.0 (2013 年リリース) 以降では、「インプレース」ファイル編集のオプションがあります:

<ブロック引用>

[...] 新しい機能を使用して構築された「インプレース」拡張機能は、GNU "sed -i をシミュレートするために使用できます。 "機能。[...]

使用例:

$ gawk -i inplace '{ gsub(/foo/, "bar") }; { print }' file1 file2 file3

バックアップを保持するには:

$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{ gsub(/foo/, "bar") }
> { print }' file1 file2 file3

GNU awk 4.1.0 以降を使用していない限り...

sed の -i のようなオプションはありません オプションなので、代わりに次のようにします:

$ awk '{print $0}' file > tmp && mv tmp file

注:-i 魔法ではなく、一時ファイル sed も作成しています

GNU awk 4.1.0 以降...

GNU awk バージョン 4.1.0 (2013 年 10 月 5 日リリース) でこの機能を追加 . -i を指定するほど簡単ではありません リリース ノートに記載されているオプション:

<ブロック引用>

新しい -i オプション (xgawk から) は、awk ライブラリ ファイルをロードするために使用されます。これは、最初の非オプション引数がスクリプトとして扱われるという点で -f とは異なります。

バンドルされている inplace.awk を使用する必要があります 次のように拡張機能を適切に呼び出すためのインクルード ファイル:

$ cat file
123 abc
456 def
789 hij

$ gawk -i inplace '{print $1}' file

$ cat file
123
456
789

変数 INPLACE_SUFFIX バックアップ ファイルの拡張子を指定するために使用できます:

$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{print $1}' file

$ cat file
123
456
789

$ cat file.bak
123 abc
456 def
789 hij

この機能が追加されたことをうれしく思いますが、言語の簡潔さと -i inplace のおかげでパワーが得られるため、実装はそれほど厄介ではありません。 8 文字は長すぎます i.m.o .

マニュアルへのリンクはこちら 公式の言葉のために。


ちょっとした裏技

echo "$(awk '{awk code}' file)" > file

Linux
  1. Linuxでのファイルパーミッションと例

  2. Git でファイルのアクセス許可を保持する

  3. Wget で保存せずにファイルを要求するにはどうすればよいですか?

  1. この awk コマンドの出力をファイルに保存する方法は?

  2. NON GNU awk を使用して変更を適所に保存する

  3. ワイルドカード ファイル パターンを指定した tar -C

  1. 改行をNulに置き換えますか?

  2. ddを使用してFFでファイルをパディングする方法は?

  3. gnuplot で .gnu ファイルをプロットする