最初の/./
条件の空白行{ print "a"$0 }
のみを削除していますが、スクリプトがすべての条件の空白行を削除するにはどうすればよいですか?
awk -F, '/./ { print "a"$0 } NR!=1 { print "b"$0 } { print "c"$0 } END { print "d"$0 }' MyFile
すでに提案されている回答の短い形式は、次のようになります。
awk NF file
すべてawk
のスクリプトは構文に従いますcondition {statement}
。ステートメント ブロックが存在しない場合、がゼロでないawk
場合は、レコード全体 (行) を出力します。condition
NF
変数 inawk
は、行内のフィールド数を保持します。そのため、行が空でない場合、既定のアクション (行全体を出力)NF
をトリガーする正の値を保持します。awk
空行の場合NF
はゼロで条件不成立なのでawk
何もしません。
この 2 文字の awk スクリプトには、シェルによって解釈される可能性のあるスペースや文字が含まれていないため、引用符も必要ないことに注意してください。
また
awk '!/^$/' file
^$
空行の正規表現です。2は、文字列が正規表現であることを理解/
させるために必要です。標準否定です。awk
!
ファイルから空白行を削除する awk コマンド:
awk 'NF > 0' filename
すべての空白行を無視する場合は、これをスクリプトの先頭に置きます
/^$/ {next}
最初の条件の中に次の条件を入れて、次のif
ようなステートメントでそれらを確認します。
awk -F, '
/./ {
print "a"$0;
if (NR!=1) { print "b"$0 }
print "c"$0
}
END { print "d"$0 }
' MyFile