awkを使用して単一の空行を二重空行に変更する

awkを使用して単一の空行を二重空行に変更する

私は読んだパスワードawkを使用して単一の空行を二重空行に変更しようとしています。しかし、これは私には効果がありません。

awk ~NF<2{printf\~\n\~}{print}~ <contour.dat >contour1.dat

awkのチュートリアルを読んだ後核因子エスケープシーケンス、まだこのコードの手がかりはありません。 awkを使ったのは今回が初めてです。

私はそれをbashで実行しています。それは私に以下を与えます:

-bash: 2{printf~n~}{print}~: No such file or directory

正しいコードは何ですか?

よろしくお願いします。

私のもの環境

GNU bash, バージョン 3.2.51(1)-リリース(x86_64-apple-darwin13) Copyright (C) 2007 Free Software Foundation, Inc.

awk バージョン 20070501

ベストアンサー1

awk ~NF<2{printf\~\n\~}{print}~ 

シェルでコマンドを実行する場合、このチルダは二重引用符でなければなりません。

awk "NF<2{printf\"\n\"}{print}"

発生するエラーは、シェルが<次の部分をリダイレクト演算子とファイル名として扱うためです。

あるいは、より良い方法は、awkスクリプトを一重引用符で囲み、引用符をエスケープする必要がないようにすることです。

awk 'NF<2{printf"\n"}{print}'

2つ未満のフィールドを含む行の前に追加の改行文字が印刷されます。ただし、これは空行と同じではありません。単語が1つしかない行にも空白行が追加されます。

フィールドが正確にゼロであることを確認してください。

awk 'NF == 0 {printf "\n"} {print}'

または行が完全に空の場合:

awk '$0 == "" {printf "\n"} {print}'

ただし、デフォルトの操作は toprint $0で、空の文字列は false で、printf "\n"空の行とほぼ同じなので、次のように要約できます。print

awk '!$0; 1'

おすすめ記事