間隔が異なる可能性がある重複行は削除されますが、#で始まる行は無視されます。

間隔が異なる可能性がある重複行は削除されますが、#で始まる行は無視されます。

これはフォローアップです。前の質問。フィールドの間隔が異なる場合でも、この構文を使用して重複行を削除します。

awk '{$1=$1};!NF||!seen[$0]++' /tmp/fstab

今から始まる行を除外したいと思います#。だから私はこの構文を使います。

awk '/^#/ || "'!'"'{$1=$1};!NF||!seen[$0]++' /tmp/fstab
-bash: !: event not found

私の文法に何の問題がありますか?

ベストアンサー1

どうですか?

awk '!NF||$1~/^#/ {print; next} {$1=$1} !seen[$0]++' /tmp/fstab

これにより、空白行または最初のフィールドが始まる行がすぐに印刷され、#実行をスキップして追加のコードを無視します。他のすべての行は、まだ見つからない限り再構成され印刷されます。

$1~/^#/行全体に一致を適用するのではなく(つまり、単に)ifをチェックする理由は、前にスペースがあるコメント行を/^#/キャッチできるようにするためです。#マンページではfstab注釈を与える資格を得るために次の事項が必要ですが、最初文字はでなければならず、#@StephenKittが指摘したように、Linux実装は先行スペースをスキップし、コメントを1行で許可しlibmountます。空でない最初キャラクターは#

おすすめ記事