私は読んだパスワード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'