31

私のスクリプトの出力は、 as を使用してタブで区切られてawkいます:

awk -v variable=$bashvariable  '{print variable"\t single\t" $0"\t double"}' myinfile.c

コマンドは while ループで実行され、awkサイクルごとに変数値とファイル myinfile.c が更新されます。このコマンドで期待どおりの結果が得られます。しかし、inmyfile.c に空白行が含まれている場合 (含まれている可能性があります)、関連する情報は出力されません。awk空行を無視するように指示できますか?

に渡す前に myinfile.c から空白行を削除することで実行できることを私は知っていますawk。私はその方法を知っsedていますが、上記のコマンド自体でそれを行いtrたいのですが、以下のような別の解決策やパイプされたものではありません。awk

sed '/^$/d' myinfile.c
tr -s "\n" < myinfile.c

提案と返信をお寄せいただきありがとうございます。

4

4 に答える 4

61

行を除外するには、次の 2 つの方法があります。

awk 'NF' data.txt

awk 'length' data.txt

これらをコマンドの最初に置くだけです。つまり、

awk -v variable=$bashvariable 'NF { print variable ... }' myinfile

また

awk -v variable=$bashvariable 'length { print variable  ... }' myinfile

これらは両方ともゲートキーパー/if ステートメントとして機能します。

NF最初のアプローチは、フィールド数 ( ) が 0 でない (つまり、0 より大きい)行のみを出力することによって機能します。

2 番目のメソッドは行の長さを調べ、長さが 0 でない (つまり、0 より大きい) 場合に機能します。

データやニーズに最も適したアプローチを選択できます。

于 2012-07-27T11:54:24.940 に答える
11

追加するだけです

/^\s*$/ {next;}  

空白行に一致し、残りの awk 一致ルールをスキップするスクリプトの前に。すべてをまとめる:

awk -v variable=$bashvariable '/^\s*$/ {next;} {print variable"\t single\t" $0"\t double"}' myinfile.c
于 2012-07-27T11:56:58.017 に答える
2

これを試すことができるかもしれません:

awk -v variable=$bashvariable  '$0{print variable"\t single\t" $0"\t double"}' myinfile.c
于 2012-07-27T11:54:52.290 に答える
1

これを試して:

awk -v variable=$bashvariable '/^.+$/{print variable"\t single\t" $0"\t double"}' myinfile.c
于 2012-07-27T11:54:57.457 に答える