私のスクリプトの出力は、awk
を次のように使用してタブ区切りです:
awk -v variable=$bashvariable '{print variable"\t single\t" $0"\t double"}' myinfile.c
awk
コマンドは、ループごとに変数値とファイルmyinfile.cを更新するwhileループで実行されます。このコマンドで期待どおりの結果が得られます。ただし、inmyfile.cに空白行(含まれている場合があります)が含まれている場合、関連情報は出力されません。 awk
に空白行を無視するように指示できますか?
awk
に渡す前にmyinfile.cから空白行を削除することでそれができることを知っています。私はsed
とtr
の方法を知っていますが、awk
が上記のコマンド自体でそれを実行し、以下のような個別の解決策やパイプによる解決策ではないことを望みます。
sed '/^$/d' myinfile.c
tr -s "\n" < myinfile.c
提案と返信をよろしくお願いします。
行をフィルターで除外するには、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
)がゼロでない(つまり、ゼロより大きい)行のみを出力することで機能します。
2番目の方法は行の長さを調べ、長さがゼロでない(つまり、ゼロより大きい)場合に動作します。
データ/ニーズに最適なアプローチを選択できます。
あなたは追加することができます
/^\s*$/ {next;}
空白行に一致し、残りのawk一致ルールをスキップするスクリプトの前に。すべてをまとめる:
awk -v variable=$bashvariable '/^\s*$/ {next;} {print variable"\t single\t" $0"\t double"}' myinfile.c
あなたはこれを試すことができるかもしれません:
awk -v variable=$bashvariable '$0{print variable"\t single\t" $0"\t double"}' myinfile.c
これを試して:
awk -v variable=$bashvariable '/^.+$/{print variable"\t single\t" $0"\t double"}' myinfile.c