21

最初の/./条件の空白行{ print "a"$0 }のみを削除していますが、スクリプトがすべての条件の空白行を削除するにはどうすればよいですか?

awk -F, '/./ { print "a"$0 } NR!=1 { print "b"$0 } { print "c"$0 } END { print "d"$0 }' MyFile
4

4 に答える 4

59

すでに提案されている回答の短い形式は、次のようになります。

awk NF file

すべてawkのスクリプトは構文に従いますcondition {statement}。ステートメント ブロックが存在しない場合、がゼロでないawk場合は、レコード全体 (行) を出力します。condition

NF変数 inawkは、行内のフィールド数を保持します。そのため、行が空でない場合、既定のアクション (行全体を出力)NFをトリガーする正の値を保持します。awk空行の場合NFはゼロで条件不成立なのでawk何もしません。

この 2 文字の awk スクリプトには、シェルによって解釈される可能性のあるスペースや文字が含まれていないため、引用符も必要ないことに注意してください。


また

awk '!/^$/' file

^$空行の正規表現です。2は、文字列が正規表現であることを理解/させるために必要です。標準否定です。awk!

于 2016-07-06T08:10:22.130 に答える
39

ファイルから空白行を削除する awk コマンド:

awk 'NF > 0' filename
于 2012-04-28T00:15:57.903 に答える
15

すべての空白行を無視する場合は、これをスクリプトの先頭に置きます

/^$/ {next}
于 2012-04-27T12:04:23.230 に答える
1

最初の条件の中に次の条件を入れて、次のifようなステートメントでそれらを確認します。

awk -F, '
    /./ { 
        print "a"$0; 
        if (NR!=1) { print "b"$0 } 
        print "c"$0 
    } 
    END { print "d"$0 }
' MyFile
于 2012-04-27T09:17:32.597 に答える