awk +重複した行を削除しますが、#で始まる行は無視します。

awk +重複した行を削除しますが、#で始まる行は無視します。

/etc/fstabLinuxのファイルから重複行を削除するには、次のawkを使用しています。

問題は、で始まる行も削除することです#

awkで始まる行を無視するように構文をどのように変更できますか#

awk '!a[$0]++'  /etc/fstab > /etc/fstab.new
cp /etc/fstab.new /etc/fstab

答え1

#繰り返されない行だけでなく、次の文字で始まる行も許可するようにAWKに指示します。

awk '/^#/ || !a[$0]++' /etc/fstab > /etc/fstab.new

重複した行なしでこれを回避するには(あなたの意見に従って)、次のようなものを使用できます。

if awk '!/#^/ && a[$0]++ { dup = 1 }; END { exit !dup }' /etc/fstab; then
    awk '/^#/ || !a[$0]++' /etc/fstab > /etc/fstab.new
    copy /etc/fstab.new /etc/fstab
fi

しかし、これは最終的に2回動作します。

関連情報